實戰一:在Jenkins基於pipeline拉取Gitlab代碼,部署到后端tomcat服務器上
1、pipeline介紹
官網地址:https://jenkins.io/2.0/
pipline是幫助Jenkins實現CI到CD轉變的重要角色,是運行在 jenkins 2.X版本的核心插件,簡單來說 Pipline 就是一套運行於 Jenkins 上的工作流框架,將原本獨立運行
於單個或者多個 節點的任務連接起來,實現單個任務難以完成的復雜發布流程, 從而實現單個任務很難實現的復雜流程編排和任務可視化 Pipeline 的實現方式是一套
Groovy DSL ,任何發布流程都可以表述為 一段 Groovy 腳本。
2、pipline語法
Stage階段:一個pipline可以划分為若干個 stage ,每個 stage 都是一個操作,比如clone 代碼、代碼 編譯 、 代碼 測試和代碼部署 階段是一個邏輯分組, 可以 跨多個 node執行。
Node節點:每個node都是一個jenkins節點,可以是jenkins master也可以是jenkins agent node是執行step 的具體服務器。
Step:步驟 step 是 jenkins pipline 最基本的操作單元 從 在 服務器創建目錄到 構建容器 鏡像 ,由各類 Jenkins 插件 提供實現,例如: sh “make”
3、pipline優勢
可持續性: jenkins 的重啟 或者 中斷后不影響已經執行的 Pipline Job
支持暫停: pipline 可以選擇 停止並 等待人工輸入 或 批准后再繼續執行。
可擴展通過 groovy 的編程更容易的擴展插件。
並行執行: 通過 groovy 腳本可以實現 step stage 間的並行執行,和更復雜的相互依賴關系 。
4、創建一個pipeline-test任務
1、創建一個pipeline-test任務,jenkins--->創建New任務
2、創建一個簡單的pipeline job測試,丟棄舊的構建,設置保留的時間,也可以不設置。
選擇流水線語法的選項,可以查看克隆gitlab網站上代碼的pipeline語法:
git credentialsId: '26375340-9ad6-41f6-82b9-73571c30e266', url: 'git@192.168.7.100:linux_gitlab/web1.git' # pipeline克隆gitlab語法
3、開始創建pipeline腳本,先選擇pipeline范例
4、配置pipeline語法腳本,其中192.168.7.104的地址是后端tomcat服務器的IP地址
node("jenkins-node1"){ # 括號中指定用jenkins-slave的主機進行克隆代碼並進行一系列的操作。 stage("clone 代碼"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && rm -rf ./*' # 注意,一開始沒有此目錄,用shell命令切換此目錄下無法成功,剛開始構建時,可以創建此目錄。 git credentialsId: '26375340-9ad6-41f6-82b9-73571c30e266', url: 'git@192.168.7.100:linux_gitlab/web1.git' echo "代碼 clone完成" } stage("代碼打包"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && tar czvf code.tar.gz ./*' echo "代碼打包完成" } stage("停止tomcat服務"){ sh 'ssh www@192.168.7.104 "/apps/tomcat/bin/shutdown.sh"' } stage("代碼復制"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/' } stage("代碼部署"){ sh 'ssh www@192.168.7.104 "cd /data/tomcat/tomcat_appdir/ && rm -rf /data/tomcat/tomcat_webdir/myapp/* && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/ "' } stage("啟動tomcat服務"){ sh 'ssh www@192.168.7.104 "/apps/tomcat/bin/startup.sh"' } }
如果使用jenkins-node1的主機,需要將本主機的ssh公鑰復制到后端tomcat服務器上,實現免秘鑰登錄
[root@jenkins-slave ~]# ssh-keygen [root@jenkins-slave ~]# ssh-copy-id www@192.168.7.104
5、立即構建pipeline-test
6、查看此時構建執行的腳本結果
Started by user 974212253@qq.com Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on jenkins-node1 in /var/lib/jenkins/workspace/pipeline-test [Pipeline] { [Pipeline] stage [Pipeline] { (clone 代碼) [Pipeline] sh + cd /var/lib/jenkins/workspace/pipeline-test + rm -rf ./code.tar.gz ./index.html [Pipeline] git using credential 26375340-9ad6-41f6-82b9-73571c30e266 Fetching changes from the remote Git repository > git rev-parse --is-inside-work-tree # timeout=10 > git config remote.origin.url git@192.168.7.100:linux_gitlab/web1.git # timeout=10 Fetching upstream changes from git@192.168.7.100:linux_gitlab/web1.git > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --tags --progress git@192.168.7.100:linux_gitlab/web1.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 Checking out Revision 5bd130b5a0936bafeb55b3a3617308902feb29e4 (refs/remotes/origin/master) > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 > git config core.sparsecheckout # timeout=10 > git checkout -f 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 > git branch -a -v --no-abbrev # timeout=10 > git checkout -b master 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 Commit message: "Add index.html" [Pipeline] echo 代碼 clone完成 [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代碼打包) [Pipeline] sh > git rev-list --no-walk 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 + cd /var/lib/jenkins/workspace/pipeline-test + tar czvf code.tar.gz ./index.html ./index.html [Pipeline] echo 代碼打包完成 [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (停止tomcat服務) [Pipeline] sh + ssh www@192.168.7.104 /apps/tomcat/bin/shutdown.sh [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代碼復制) [Pipeline] sh + cd /var/lib/jenkins/workspace/pipeline-test + scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/ [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代碼部署) [Pipeline] sh + ssh www@192.168.7.104 'cd /data/tomcat/tomcat_appdir/ && rm -rf /data/tomcat/tomcat_webdir/myapp/* && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/ ' ./index.html [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (啟動tomcat服務) [Pipeline] sh + ssh www@192.168.7.104 /apps/tomcat/bin/startup.sh Tomcat started. [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
7、此時可以看到jenkins-slave服務器上已經有代碼
[root@jenkins-slave ~]# cd /var/lib/jenkins/workspace/pipeline-test [root@jenkins-slave pipeline-test]# ls code.tar.gz index.html [root@jenkins-slave pipeline-test]# cat index.html linux web 123456[root@jenkins-slave pipeline-test]#
8、后端tomcat服務器上也已經有了代碼
[root@tomcat-web1 ~]# cd /data/tomcat/tomcat_webdir/myapp/ [root@tomcat-web1 myapp]# cat index.html linux web 123456[root@tomcat-web1 myapp]#
9、訪問tomcat網站,成功訪問網頁,此時基於pipeline流水線拉取代碼成功。
Jenkins視圖
1、列表視圖
1、我的視圖----->列表視圖使用場景比較多,用於將一個業務的job保存至一個列表視圖進行分類管理,即不同業務的job放在不同的列表視圖中 。
2、創建一個列表視圖,命名為pipeline-view
3、創建完pipeline-view,選擇自己已經創建的項目。
4、在新創建的pipeline-view列表視圖后,可以查看到分配的相同業務的項目。