在完成前文的pipeline項目構建和更新以後,本文咱們來測試maven項目的構建自動發佈。具體環境要求以下:node
一、docker私有倉庫(本例中使用vmware企業級產品harbor)
二、jenkins插件Publish Over SSH安裝完成
三、Jenkins Slave Pod中須要有Docker環境(由於post step1中須要將war文件打包到docker鏡像中,所以Jenkins Slave須要有Docker環境,本例中採用在雲環境pod模板中添加hostpath掛載的方式實現)
四、項目代碼中須要包含以下文件
Dockerfile(用來編譯docker鏡像)
tomcat.yaml(用來初次部署,根據實際狀況包含deployment、service、ingress、pv\pvc等)
rolling-update.sh(用來滾動更新)git
一、Dockerfileweb
FROM harbor.59iedu.com/fjhb/tomcat_base:v1.0 MAINTAINER ylw "ylw@fjhb.cn" RUN rm -rf /home/tomcat/webapps/* COPY target/*.war /home/tomcat/webapps/ROOT/ RUN cd /home/tomcat/webapps/ROOT/ && jar -xvf *.war && rm -rf *.war
harbor.59iedu.com/fjhb/tomcat_base:v1.0 鏡像的dockerfile請參考前文:
https://blog.51cto.com/ylw6006/2107307docker
二、tomcat.yamlshell
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-jcsj namespace: default spec: replicas: 2 template: metadata: labels: k8s-app: tomcat-jcsj spec: containers: - image: harbor.59iedu.com/fjhb/jcsj:vBUILD_NUMBER name : tomcat-jcsj imagePullPolicy: Always ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /home/tomcat/logs - image: harbor.59iedu.com/fjhb/filebeat:v1.0 name: filebeat imagePullPolicy: Always volumeMounts: - name: app-logs mountPath: /log volumes: - name: app-logs emptyDir: {} imagePullSecrets: - name: harborsecret --- apiVersion: v1 kind: Service metadata: name: tomcat-jcsj labels: k8s-app: tomcat-jcsj spec: type: NodePort ports: - port: 8080 protocol: TCP targetPort: 8080 name: http nodePort: 8480 selector: k8s-app: tomcat-jcsj
三、rolling-update.shapi
#!/bin/sh NAMESPACE=default DEPLOYMENT=tomcat-jcsj REGISTRY=harbor.59iedu.com/fjhb/jcsj FILE=tomcat.yaml BUILD_NUMBER=1 STATUS=$(kubectl get deployment -n $NAMESPACE |grep $DEPLOYMENT |wc -l) if [ $STATUS -eq 0 ];then kubectl create -f $FILE else kubectl set image deployment/$DEPLOYMENT $DEPLOYMENT=$REGISTRY:v$BUILD_NUMBER --namespace=$NAMESPACE fi
一、添加k8s master的ssh認證信息
點擊「jenkins」 —— 「系統管理」—— 「系統設置」——「Publish over SSH」
輸入主機的名稱、ip地址及用戶名,點擊「高級」,在「passphrase/password」欄輸入密碼,點擊下方的「Test Configuration」測試鏈接,當出現「Success」提示時說明鏈接成功。tomcat
二、在雲環境的pod模板中添加docker環境app
點擊「jenkins」 ——「新建」 ——「構建一個maven項目」,輸入項目的名稱,點擊「OK」ssh
勾選「Restrict where this project can ben run」,輸入前面建立kubernetes環境時配置好的容器模板名稱jenkins-slave。這樣在運行構建任務的時候會k8s集羣自動啓動一個slave pod進行構建工做,構建工做完成後自動銷燬podwebapp
一、能夠選擇git或者svn進行源碼管理,若是沒有出現這兩個按鈕,須要去安裝相應的插件
二、點擊credentials欄的add按鈕能夠添加svn帳號信息,選擇類型爲「username with password
」
三、checkout strategy選擇「use svn update as much as possible」
在構建觸發器配置中選擇「build wheneven a snapshot dependency is built」
Root POM框輸入pom.xml
Goals and options框輸入clean compile package
點擊「add post-build step」——「execute shell」——「run only if build susseeds」
shell腳本內容以下:
IMAGE_NAME="harbor.59iedu.com/fjhb/jcsj:v$BUILD_NUMBER" CONATINER_NAME="jcsj-dev" echo "192.168.1.227 harbor.59iedu.com" >> /etc/hosts cd /home/jenkins/workspace/maven-test/ sed -i "s/BUILD_NUMBER/$BUILD_NUMBER/g" tomcat.yaml sed -i "s/BUILD_NUMBER=1/BUILD_NUMBER=$BUILD_NUMBER/g" rolling-update.sh docker login harbor.59iedu.com -u admin -p Harbor12345 docker build -t $IMAGE_NAME . docker push $IMAGE_NAME
上述腳本的做用是將前面編譯好的war包build成鏡像文件並推送到倉庫,並完成部署文件和自動更新文件中的鏡像版本號修改。
點擊「add post-build step」——「Send files or execute command over SSH」
一、Name框選擇前面建立好的k8s master節點vm1
二、Source files 框輸入tomcat.yaml, rolling-update.sh
三、Exec command框輸入sh rolling-update.sh
一、構建前
二、構建中
三、構建完成
四、測試與驗證