在互聯網時代,對於每一家公司,軟件開發和發佈的重要性不言而喻,目前已經造成一套標準的流程,最重要的組成部分就是持續集成(CI)及持續部署、交付(CD)。本文基於Jenkins+Docker+Git實現一套CI自動化發佈流程。html
工做流程:java
環境規劃以下:linux
| 角色 | IP |
| :-------- | ::--------:|
| Jenkins/Docker | 192.168.0.217 |
| Docker | 192.168.0.218 |
| Git/Registry | 192.168.0.219 |git
操做系統:CentOS7.4github
# yum install git -y
# useradd git # passwd git
# su - git # mkdir solo.git # cd solo.git # git --bare init
# git clone git@192.168.0.212:/home/git/solo.git
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於代碼編譯、部署、測試等工做。 Jenkins也是一個跨平臺的,大多數主流的平臺都支持,並且安裝很簡單,咱們這裏以部署war包方式安裝它。
官網下載地址:https://jenkins.io/download/
如圖點擊下載最後一個Generic Java package(war):
在安裝前須要具有Java環境,安裝方式以下:web
# tar zxf jdk-8u45-linux-x64.tar.gz # mv jdk-8u45-linux-x64 /usr/local/jdk1.8 # vi /etc/profile JAVA_HOME=/usr/local/jdk1.8 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH # source /etc/profile
在192.168.0.217主機安裝Jenkins,下載Tomcat二進制包將war包到webapps下便可:**docker
# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war # wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz # tar zxf apache-tomcat-8.5.32.tar.gz # mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins # rm /usr/local/tomcat-jenkins/webapps/* -rf # unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT # cd /usr/local/tomcat-jenkins/bin/ # ./startup.sh # tail ../logs/catalina.out -f ... Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: a5f1f7c167fd4b8ab62f9497d32d97db This may also be found at: /root/.jenkins/secrets/initialAdminPassword ...
部署成功,訪問Jenkins:http://ip:8080apache
第一步:輸入上面日誌輸出的密碼:a5f1f7c167fd4b8ab62f9497d32d97db,或者從本機/root/.jenkins/secrets/initialAdminPassword文件獲取,點擊繼續
第二步:點擊「選擇插件來安裝」
第三步:保持默認,點擊繼續
第四步:建立管理員用戶,保存並完成
第五步:設置Jenkins訪問地址,保持默認,點擊保存完成json
安裝完成,開始使用Jenkins:
centos
Docker Hub做爲Docker默認官方公共鏡像;若是想本身搭建私有鏡像倉庫,官方也提供registry鏡像,使得搭建私有倉庫很是簡單。
在192.168.0.219部署:
# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
接下來測試registry可用性。
因爲Docker CLI默認以HTTPS訪問,而部署的registry並未提供HTTPS,所以,須要在pull鏡像的Docker主機(192.168.0.217,192.168.0.218)添加HTTP可信任:
# vi /etc/docker/daemon.json {"insecure-registries":["192.168.0.219:5000"]} # service docker restart
在192.168.0.217/192.168.0.218/192.168.0.219主機安裝Docker,以下:
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce -y
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
# systemctl start docker # systemctl enable docker
JAVA程序必須有JDK環境才能夠運行,爲了減小鏡像大小及提升性能,這裏直接把JDK放到宿主機上,容器以掛載形式使用。
在192.168.0.217/192.168.0.218安裝JDK:
# tar zxvf jdk-8u45-linux-x64.tar.gz # mv jdk-8u45-linux-x64 /usr/local/jdk1.8
Tomcat基礎鏡像Dockerfile:
# cat Dockerfile FROM centos:7 MAINTAINER www.aliangedu.com ENV VERSION=8.5.32 ENV JAVA_HOME /usr/local/jdk RUN yum install wget -y RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \ tar zxf apache-tomcat-${VERSION}.tar.gz && \ mv apache-tomcat-${VERSION} /usr/local/tomcat && \ rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \ mkdir /usr/local/tomcat/webapps/ROOT EXPOSE 8080 CMD ["catalina.sh", "run"]
構建鏡像並上傳到registry:
# docker build -t 192.168.0.219:5000/tomcat-85 -f Dockerfile . # docker push 192.168.0.219:5000/tomcat-85
主頁面 -> 系統管理 -> 全局工具配置
指定JDK、Maven路徑,Git保持默認:
若是Jenkins主機沒有git命令,須要安裝Git:
# yum install git -y
1. Jenkins安裝必要插件
主頁面 -> 系統管理 ->管理插件:
安裝SSH與Git Parameter插件。
插件說明:
2. 配置SSH插件
第一步:先建立一個用於鏈接Docker主機的憑據。
主頁面 -> 憑據 -> 系統 -> 右擊全局憑據 -> 添加憑據:
輸入鏈接Docker主機的用戶名和密碼:
第二步:添加SSH遠程主機
主頁面 -> 系統管理 -> 系統設置 -> SSH remote hosts:
從Github拉取開源JAVA博客系統solo:
# git clone https://github.com/b3log/solo # cd solo 移除舊的推送地址,添加新的: # git remote remove origin # git remote add origin git@192.168.0.219:/home/git/solo.git 提交代碼到Git倉庫並建立tag: # touch src/main/webapp/a.html # git add . # git commit -m 「a」 建立標籤: # git tag 1.0.0 推送到Git服務器: # git push origin 1.0.0
主頁面 -> 新建任務 -> 輸入任務名稱,構建一個Maven項目:
注意:若是沒有顯示「構建一個Maven項目」選項,須要在管理插件裏安裝「Maven Integration plugin」插件。
配置Git參數化構建:
動態獲取Git倉庫tag,與用戶交互選擇Tag發佈:
指定項目Git倉庫地址:
修改*/master爲$Tag,Tag是上面動態獲取的變量名,表示根據用戶選擇打代碼版本。
設置maven構建命令選項:
利用pom.xml文件構建項目。
在Jenkins本機鏡像構建與推送到鏡像倉庫,並SSH遠程鏈接到Docker主機使用推送的鏡像建立容器:
上圖中,在Jenkins主機執行的Shell命令以下:
REPOSITORY=192.168.0.219:5000/solo:${Tag} # 構建鏡像 cat > Dockerfile << EOF FROM 192.168.0.219:5000/tomcat-85:latest RUN rm -rf /usr/local/tomcat/webapps/ROOT COPY target/*.war /usr/local/tomcat/webapps/ROOT.war CMD ["catalina.sh", "run"] EOF docker build -t $REPOSITORY . # 上傳鏡像 docker push $REPOSITORY
上圖中,SSH遠程Docker主機執行的Shell命令以下:
REPOSITORY=192.168.0.219:5000/solo:${Tag} # 部署 docker rm -f blog-solo |true docker image rm $REPOSITORY |true docker container run -d --name blog-solo -v /usr/local/jdk1.8:/usr/local/jdk -p 88:8080 $REPOSITORY
注:容器名稱blog-solo,暴露宿主機端口88,即便用宿主機IP:88訪問blog-solo項目。
blog-solo項目已配置完成,開始構建:
選擇tag,開始構建:
點擊左下角構建歷史裏,右擊第一個查看控制檯輸出:
瀏覽器訪問solo項目:http://192.168.0.218:88
若是輸出上述頁面說明是正常的,頁面沒有加載成功樣式,須要修改下項目裏訪問地址。
至此,自動化CI環境搭建完成,你能夠模擬提交代碼並打tag測試自動化發佈流程。
若你在容器運維中,遇到容器方面的問題,能夠給我微信↓。一樣,若發現有任何紕漏,還請隨時指正,相互學習,共同進步!
本文視頻版:點我