在容器中運行 Jenkins pipeline 任務(wù)
持續(xù)集成中的 pipeline 技術(shù)和 docker 都是當(dāng)前正在發(fā)展的主流方向,當(dāng)然把它們結(jié)合起來在 CI/CD 過程中發(fā)揮出更強大的威力也是大家共同的目標(biāo)。本文將介紹如何在 Jenkins pipeline 中集成使用 docker,好在當(dāng)前的 Jenkins 已經(jīng)默認通過插件實現(xiàn)了與 docker 的集成,所以這將是一段輕松愉快的旅程。
簡單起見,我們使用一臺安裝了 docker 的 linux 虛機,并通過 ssh 將其啟動為 Jenkins server 的 build agent。主要操作步驟如下:
我們通過下面的腳本一次搞定這些操作(docker 的安裝請參考官方文檔):
在 linux 虛機上執(zhí)行上面的腳本,然后在 Jenkins 中添加 node(build agent):
其中的 "Remote root directory" 就是剛才創(chuàng)建的 /var/jenkins 目錄。"Launch method" 選擇 "Launch slave agents via SSH"。Host 為 linux 虛機的 IP,Credentials 則為剛才創(chuàng)建的 jenkins 用戶。
先來運行一個簡單的 demo。創(chuàng)建一個 pipeline 類型的 job,并輸入下面的 pipeline script:
運行該任務(wù),執(zhí)行結(jié)果如下:
其中的命令 node --version 就是在容器中執(zhí)行的。
Jenkins 默認會把任務(wù)分配給任何可用的 agent,如果我們要指定任務(wù)執(zhí)行的 agent,可以在 docker 的配置中指定 label,這樣該任務(wù)只會被分配到具有某個 label 的 agent 上運行:
我們還可以在 folder 級別指定 label,這樣的設(shè)置會應(yīng)用在 folder 內(nèi)所有沒有設(shè)置 label 的任務(wù)上:
除了 label,還可以設(shè)置 docker registry URL 及其身份認證的憑據(jù)。
我們還可以在不同的 stage 中運行不同的容器,其實就是每個 stage 用自己的容器鏡像創(chuàng)建容器并執(zhí)行任務(wù),stage 之間沒啥關(guān)系:
通過指定 Dockerfile 文件,在 build agent 上直接構(gòu)建容器鏡像,然后生成容器并執(zhí)行命令。下面的 demo 中我們通過 Dockerfile 創(chuàng)建一個包含 curl 工具的容器鏡像,然后通過該鏡像啟動容器并執(zhí)行 HTTP 請求。該 demo 一共包含三個文件:Dockerfile 、entrypoint.sh 和 Jenkinsfile,大家可以直接從這里下載它們。先看一下 Dockerfile 文件的內(nèi)容:
其中的 entrypoint.sh 內(nèi)容如下:
Jenkinsfile 的內(nèi)容如下:
注意,該文件中我們設(shè)置了 dir 為 curl 目錄,這是因為此項目的 Dockerfile 文件不是在代碼庫的根目錄下,所以需要指定其相對目錄的路徑。
然后在 Jenkins 中創(chuàng)建 pipeline 類型的 job,并把 pipeline 的 Definition 設(shè)置為 "Pipeline script from SCM" 。接下來設(shè)置好代碼倉庫的路徑就可以了。運行該任務(wù),從日志上可以看到取完代碼后先通過 Dockerifle 文件構(gòu)建了容器鏡像:
并在容器中運行了 curl http://www.cnblogs.com/sparkdev/p/8795141.html 命令。
上面的例子中我們通過 Dockerfile 生成了容器鏡像,并且完成了相關(guān)的測試(通過 curl 請求了測試網(wǎng)頁)。接下來就是把生成的容器鏡像推送到鏡像倉庫中。下面將演示如何在 pipeline 中把構(gòu)建的鏡像推送的鏡像倉庫。首先在 Folder 的配置界面中添加訪問 dockerhub.com 憑據(jù)如下:
如果是訪問 dockerhub 就不需要填寫 "Docker registry URL"。然后添加下面的 Pipeline script:
注意, 9e70c1eb-814c-4cf2-97e9-5bfc20461231 剛才創(chuàng)建的憑據(jù)的 ID,可以從 folder 的 Credentials 界面中獲得。運行這個任務(wù),執(zhí)行成功后去 dockerhub.com 上看一下,是不是已經(jīng)把新構(gòu)建的鏡像推送上去了:
從本文的幾個簡單 demo 可以看出,jenkins pipeline 和 docker 集成的已經(jīng)很好了。當(dāng)然你還可以實現(xiàn)更多更復(fù)雜的用例,趕緊動手吧!
參考:
Using Docker with Pipeline
Pipeline Syntax
作者:sparkdev
出處:http://1t.click/aerf
相關(guān)評說:
游仙區(qū)方向: ______ 1、linux用戶登錄后默認目錄是在/etc/passwd文件設(shè)置的.如下圖所示,一共顯示了四行數(shù)據(jù),其中第一行的/root即為root用戶登錄后的默認目錄,第二行daemon用戶的默認目錄是/usr/sbin.2、要修改登錄后默認目錄,可以用vim編輯器,打開/etc/passwd ,找到相應(yīng)的用戶,修改倒數(shù)第一個冒號前面的目錄即可,如下圖所示.
游仙區(qū)方向: ______ 創(chuàng)建自基礎(chǔ)容器容器安裝文章所需用工具讀者容器 id 能與文章所同步 docker ps -a 結(jié)準 sudo docker commit da90 custom/base 容器功提交執(zhí)行 sudo docker images 我看剛才提交容器(面結(jié)所示)我容器基礎(chǔ)容器再創(chuàng)建新容器!
游仙區(qū)方向: ______ JSP執(zhí)行過程, 1. 用戶請求JSP頁面(HTTP請求)2. web server中的servlet容器發(fā)現(xiàn)URL中有JSP后綴, 就調(diào)用JSP容器來處理3. 如果此頁面是第一次被請求, JSP容器要定位JSP頁面文件并解釋它, 解釋的過程包括: 將JSP源文件處理成...
游仙區(qū)方向: ______ 如果在docker run后面追加-d=true或者-d,那么容器將會運行在后臺模式.此時所有I/O數(shù)據(jù)只能通過網(wǎng)絡(luò)資源或者共享卷組來進行交互.因為容器不再監(jiān)聽你執(zhí)行docker run的這個終端命令行窗口.但你可以通過執(zhí)行docker attach來重新附著到該容器的回話中.需要注意的是,容器運行在后臺模式下,是不能使用--rm選項的.
游仙區(qū)方向: ______ 首選要確認你是什么操作系統(tǒng).另外要確認你Jenkins的部署方式(直接安裝包安裝,還是war包容器方式部署、其他方式如 java -jar jenkins.war) windows 軟件包安裝后可以在服務(wù)里面重啟.如圖所示 啟動Jenkins服務(wù) net start jenkins (注:如果Jenkins曾經(jīng)啟動過,啟動服務(wù)不需要進入到某個目錄) 停止Jenkins服務(wù) net stop jenkins
游仙區(qū)方向: ______ 方法: 1、打開注冊表:regedit 》 定位到 ↓; 2、雙擊打開“PortNumber”↓; 3、選擇“十進制”,直接修改3389 為 其它 端口號.
游仙區(qū)方向: ______ 你好.注釋是跟隨系統(tǒng)走的. 如果jenkins部署到windows上 命令行可以用rem來注釋 如果部署到linux上可以用#注釋.也可以用其他方式注釋.
游仙區(qū)方向: ______ 1.環(huán)境搭建 a) tomcat java_home=c:\program files\java\jdk1.6.0_24 jre_home=c:\c:\program files\java\jre6 b) ant ant_home=c:\apache-ant-1.8.2 c) jenkins 在網(wǎng)站下載war包,然后放倒tomcat的webapp文件夾中,啟動tomcat即可. 使用瀏覽器訪問...
游仙區(qū)方向: ______ 安裝完成后,有如下相關(guān)目錄:(1)/usr/lib/jenkins/:jenkins安裝目錄,WAR包會放在這里. ( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在這里配置.(3)/var/lib/jenkins/:默認的JENKINS_HOME.(4)/var/log/jenkins/jenkins.log:Jenkins日志文件.