創(chuàng)建公司策劃書寧波優(yōu)化推廣選哪家
cicd概念
持續(xù)集成(?Continuous Integration)
持續(xù)頻繁的(每天多次)將本地代碼“集成”到主干分支,并保證主干分支可用
持續(xù)交付(Continuous Delivery)
是持續(xù)集成的下一步,持續(xù)頻繁地將軟件的新版本交付到類生產(chǎn)環(huán)境(類似于預發(fā)),交付給測試、產(chǎn)品驗收。
持續(xù)交付強調(diào)的是“交付”,不管怎么更新,軟件是隨時隨地可以交付的,相比持續(xù)集成,持續(xù)交付除了交付到類生產(chǎn)環(huán)境之外,還會執(zhí)行一些集成測試、API測試等等,確保交付的產(chǎn)物可以直接交付部署
持續(xù)部署(Continuous Deployment)
是持續(xù)交付的下一步,“自動”將代碼部署到生產(chǎn)環(huán)境
持續(xù)部署強調(diào)的是“部署”,它的目標是,代碼在任何時刻都是可部署的,可以進入生產(chǎn)階段。
持續(xù)部署和持續(xù)交付觸發(fā)方式的區(qū)別是,持續(xù)部署是自動完成的,持續(xù)交付是手動完成的
1 jenkins CICD操作
前提:
gitlab安裝,并創(chuàng)建了一個項目,gitlab安裝了相應插件,參見上一篇文章?
說明:
下面步驟為一步一步進行,確保每一步都沒有問題后進行下一步操作,從而得到一個比較完整的jenkinscicd操作,為后續(xù)使用jenkins pipeline項目奠定基礎
項目以一個簡單的springboot項目為基礎,進行操作
目前操作僅為jenkins操作,未接入到k8s中,接入操作在jenkins pipeline項目時進行
1.1 jenkins拉取gitlab代碼
步驟
先在jenkins中創(chuàng)建一個自由風格的項目
?
?
在源碼管理中添加git,遠程倉庫名稱和登陸憑證
?點擊立即構(gòu)建
?驗證是否拉取成功
可以查看控制臺輸出日志
也可以進入jenkisn服務器中查看是否拉取到代碼,操作如下:
進入服務器【jenkins安裝的服務器】,進入容器查看【拉取的本地項目都會存放到當前用戶目錄的workspace目錄下】
# 1.進入容器sudo docker exec -it jenkins bash# 2.進入用戶目錄cd ~# 3.進入workspacecd workspace/# 4.查看項目是否已經(jīng)拉去到本地
jenkins@fe5b68bad9e1:~/workspace$ cd test
jenkins@fe5b68bad9e1:~/workspace/test$ ls
pom.xml src
發(fā)現(xiàn)拉取到gitlab的代碼,說明該項測試沒有問題
1.2 調(diào)用maven打包?
再次進入項目管理,在build steps中增加構(gòu)建步驟,選擇調(diào)用頂層maven目標
?
選擇之前添加的maven
命令為clean package -DskipTests
打包并跳過測試
?點擊立即構(gòu)建?
構(gòu)建完成后,進入服務器查看是否有jar包
jenkins@fe5b68bad9e1:~/workspace$ cd test
jenkins@fe5b68bad9e1:~/workspace/test$ ls
pom.xml src target
jenkins@fe5b68bad9e1:~/workspace/test$ cd target/
jenkins@fe5b68bad9e1:~/workspace/test/target$ ls
classes generated-test-sources maven-status test-0.0.1-SNAPSHOT.jar.original
generated-sources maven-archiver test-0.0.1-SNAPSHOT.jar test-classes
1.3 將jar包發(fā)送到目標服務器
編輯項目配置
選擇構(gòu)建后操作
添加send build artifacts over ssh
選擇之前配置的ssh
將target/的jar包發(fā)送到目標服務器
ssh server為上一篇中jenkisn安裝插件后配置
transfers中source files為jenkisn中target目錄下所有jar文件
?選擇構(gòu)建后在目標服務器中查看
[root@k8s-master target]# pwd
/usr/local/k8s/target
[root@k8s-master target]# ls
test-0.0.1-SNAPSHOT.jar
發(fā)現(xiàn)已經(jīng)發(fā)送過來該jar文件
1.4 將jar構(gòu)建docker鏡像
在代碼中添加dockerfile和docker-compose.yml
Dockerfile
FROM eclipse-temurin:8-jre
LABEL org.opencontainers.image.authors="fooleryang@139.com"
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar
Docker-compose.yml
version: 'v1.0.0'
services:mytest:build:context: ./dockerfile: Dockerfileimage: mytest:v1.0.0container_name: mytestports:- 8080:8080
在pom.xml中添加固定名稱,讓其打包后固定名稱為mytest?
jenkins中項目配置中構(gòu)建后配置添加
在jenkins項目配置中增加命令?
命令為將target目錄下的jar文件復制到docker目錄下【保存dockerfile文件目錄,在源碼中創(chuàng)建】,再執(zhí)行構(gòu)建
在目標服務器上查看?
[root@k8s-master docker]# docker images |grep test
mytest v1.0.0 5178b6e1eab7 12 minutes ago 239MB
[root@k8s-master docker]# docker ps |grep test
f8f5be867460 mytest:v1.0.0 "/bin/sh -c 'java -j…" 12 minutes ago Up 12 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp mytest
發(fā)現(xiàn)已經(jīng)運行了鏡像
訪問
?1.5 修改代碼,重新發(fā)布
修改代碼,將返回信息為 版本為1.0.2
?提交代碼到gitlab,jenkins重新進行構(gòu)建
構(gòu)建完成后訪問
1.6 參數(shù)化構(gòu)建?
修改代碼,將版本輸出為v2.0.0
?
修改docker-compose.yml?
將image設置為v2.0.0,version也設置為v2.0.0
?上傳代碼到gitlab,并打上標簽為v2.0.0
jenkins中當前任務中進行配置
在general中選擇參數(shù)化構(gòu)建過程
選擇git 參數(shù)【之前下載的Git paremeter插件】
?
名稱為tag【自定義,但后續(xù)需要使用】
參數(shù)類型選擇標簽?
默認值選擇main分支
?在build setp中添加咨詢shell操作
?
添加切換分支命令
并移動該步驟到第一步 $tag可以獲取到parameters中配置的參數(shù)tag
?查看項目,發(fā)現(xiàn)自動拉取了gitlab的標簽
?選擇構(gòu)建v1.0.0,輸出為之前修改的v1.0.2
選擇構(gòu)建v2.0.0,輸出為當前修改的v2.0.0
?
2 總結(jié)?
至此,jenkins拉取gitlab,并可以參數(shù)化構(gòu)建代碼,發(fā)布到目標機完成
但是當前操作缺點也很明顯,需要docker file,每次發(fā)布標簽修改修改多處內(nèi)容;發(fā)布過程的操作修改進入jenkins中進行設置和修改
后續(xù)將使用pipeline項目將jenkins發(fā)布操作集成到一個Jenkins文件中,該文件在項目源碼中,這樣只需要修改該文件,即可完成對發(fā)布操作的修改,也不需要修改多處地方來替換tag
也將使用k8s來進行發(fā)布項目?