Jenkins自动化部署容器
上一篇文章《Dockerfile配置APM監控實現Java容器的性能監控》實現了在tomcat容器中部署APM監控,就著這個話題我們繼續擴展一下如何自動化部署。關于自動化部署容器,最常用到的是Jenkins,公司也有相關環境。但是為了全面的學習容器,我這次不用公司的Jenkins環境,而是直接用容器重新部署一套。
前提條件:需要兩臺裝了Docker引擎的Centos7機器,一臺作為Jenkins宿主機,一臺作為要自動部署容器的宿主機(直接引用上一篇文章提到的設備和tomcat基礎文件)。
1、編寫Jenkins的Dockerfile,主要是為了安裝SVN客戶端
# New docker file from zgh # VERSION 1.1 # Author: zgh#基礎鏡像 FROM jenkins:2.60.3#作者 #MAINTAINER <zgh@rexen.com.cn> USER root#安裝SVN客戶端(容器hosts不能在鏡像中修改) RUN apt-get install -y subversionUSER jenkins #默認工作目錄 WORKDIR /var/jenkins_home說明:jenkins盡量選最新版本的,本次用的是2.60.3版。
2、生成Jenkins容器
先是在Dockerfile目錄下build一個jenkins鏡像(后面的.表示路徑,別忽略)
docker build -t jenkins-zgh:v1.1 .
然后通過以下命令運行容器,注意:由于連接公司的SVN服務器需要修改hosts文件,但是我們不應直接在容器中修改,而又無法在Dockerfile中配置(因為hosts文件是在啟動容器時才被加載生成),所以我們需要在這里add-host一下SVN的地址。
docker run --name jenkins-zgh -d --restart=unless-stopped -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home --add-host rexen-products:172.17.2.13 jenkins-zgh:v1.1執行以上命令前,還需要在主機上創建一下卷目錄(/var/jenkins_home,實現將jenkins容器中的配置及項目文件都固化到宿主機上)。執行完命令,就生成了一個端口為8080,hosts中加了SVN(rexen-products? ?172.17.2.13)地址的Jenkins了。
3、配置Jenkins
容器啟動后,就可以連接Jenkins,需要做一些初始化配置,另外對于本次操作來說,還需要安裝配置一些插件(有的插件可能默認已安裝):SSH插件:(Publish Over SSH、SSH Agent)、Maven插件(Maven Integration plugin)、Docker插件(Docker Commons Plugin、Docker Pipeline)等。
(1)配置SSH(系統管理-->系統設置-->Publish over SSH)
配置項包括Passphrase(遠程SSH登錄linux的密碼)、SSH Servers(Name、Hostname、Username、Remote Directory),Remote Directory(遠程操作目錄,該配置很關鍵,遠程安裝部署容器就通過這個目錄操作)。最后通過Test Configuration來測試一下SSH是否能夠遠程訪問。以下是我配置的SSH Servers, 其中Remote Directory配置為 /home:
(2)其他配置
如果只是單純的實現Docker自動部署,沒有什么需要額外的配置,Jenkins Location可能需要配置一下Jenkins的IP和端口,Subversion選擇默認的版本1.8。如果不是用SVN管理Dockerfile,而是用GitHub,那就需要配置一下GitHub Servers。如果Docker鏡像還想自動發布到registry上,那還要再配置一下Docker registry的相關參數。
4、將需要構建的容器項目上傳SVN
(1)配置pom.xml,由于只做容器簡單構建,不需要代碼編譯,所以寫的比較簡單:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>dockerManven</groupId><artifactId>dockerManven</artifactId><version>0.0.1-SNAPSHOT</version><name>dockerManven</name><url>http://maven.apache.org</url><build><plugins><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>tomcat-docker:v1.4</imageName><dockerDirectory>${basedir}</dockerDirectory> <!-- 指定 Dockerfile 路徑--><!-- 這里是復制 jar 包到 docker 容器指定目錄配置,也可以寫到 Docokerfile 中 --><resources><resource><targetPath>/usr/local/tomcat</targetPath><directory>${project.build.directory}</directory><!--<include>${project.build.finalName}.jar</include>--></resource></resources></configuration></plugin> </plugins> </build> </project>(2)我們將上一篇文章《Dockerfile配置APM監控實現Java容器的性能監控》(具體如何部署tomcat容器及APM監控參照這篇文章)提到的tomcat容器Dockerfile及相關文件,連同pom.xml都提交到SVN服務器上:
5、創建Jenkins項目
選擇構建一個Maven項目,項目名稱:TestDocker
(1)源碼管理,選擇Subversion,將上面所上傳的SVN項目路徑配置到Repository URL,選擇SVN賬號(首次需要Add賬號)
(2)Build項填寫pom.xml
(3)構建后操作
由于沒有代碼編譯這一環節,所以上面的build操作其實沒有實際意義,所以【構建后操作】成為最關鍵的一步,我們需要用這一步,將Dockerfile及相關文件發送到遠程端Linux,并執行docker build和docker run操作(當然你也可以改成在本地docker build,然后docker push到Repository,最后通過SSH遠程命令在遠程端Linux上執行docker pull和docker run)。
本次要SSH發送的文件目錄,含有子目錄apminsight,所以需要在一次Transfers Set配置中用逗號分隔,因為SSH遠程發送默認不會遞歸發送子文件夾,所以分成多目錄發送,Source files支持用逗號分隔發送多個文件夾,如下所示:
Remote directory很關鍵,由于以上第3步配置Jenkins時,SSH的Remote directory配置為了 /home,所以這里配置完后,操作目錄就相當于指向了 /home/TestDocker,加上配完的Source files,相當于告訴jenkins將SVN項目下的*和apminsight/*發送到遠端Linux(172.17.2.84)下的 /home/TestDocker 目錄下。
(1)本次我配了兩項Transfers Set,第一項只配置Exec command,其他不配置,主要是遠程清除歷史創建的容器和刪除歷史構建文件,以便做到反復構建。
Exec command中的代碼為:
#docker rm -f tomcat-docker:v1.4 #刪除已建的容器,防止容器名,端口沖突 docker ps | grep tomcat-docker | grep -v "grep" | awk '{print $1}' | xargs docker rm -f sleep 1 #刪除已構建的鏡像,防止鏡像名沖突 docker images | grep tomcat-docker | grep -v "grep" | awk '{print $3}' | xargs docker rmi #刪除SSH傳輸過來的歷史構建文件 rm -rf /home/TestDocker(2)添加和配置第二項Transfers Set,實現傳輸待構建的Dockerfile及相關文件,并執行docker build和docker run
Exec command中的代碼為:
sleep 1 cd /home/TestDocker docker build -t tomcat-docker:v1.4 . sleep 1 docker run --name docker-tomcat -d --restart=unless-stopped -p 8088:8080 -e APM_HOST=172.16.1.251 -e APM_IS_OPEN=false -v /opt/tomcat-logs:/usr/local/tomcat/logs tomcat-docker:v1.4 #運行鏡像生成容器這樣就基本配置完了(如果需要發送郵件和執行定時構建項目,就按網上說的通用方式繼續配置),直至保存項目。
6、構建Docker項目
對已創建的項目,點擊構建,就能看到容器的build過程
最后看到docker run成功后,項目也就SUCCESS了
驗證一下容器是否在遠程Linux下成功啟動(通過docker ps查看),我這是直接通過Rancher平臺查看:
總結
以上是生活随笔為你收集整理的Jenkins自动化部署容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据类型:UNSIGNED注意
- 下一篇: Hadoop 面试题之Hbase