一、準備工作:
212機子:
213機子:
-
安裝JDK並配置;
-
安裝maven並配置;
-
安裝docker
其中專案的話可以參照截圖,controller,model什麼的這些自定義就行。
重點注意紅框框的這幾個
1、properties 配置
application-dev.properties 和 application-test.properties 主要就是資料庫地址不一樣,其他都一樣。這裡這兩個檔案不配置內容也可以。
2、pom檔案
3、指令碼檔案
主要的來了。這五個配置檔案
(1)docker_build.sh
#!/bin/bash RUNENV=$1 MODULE=$2 echo "環境: ${RUNENV}" # docker 倉庫地址 IMAGE_NAME="192.168.206.212:5000/${MODULE}:1.0.0.RC" echo $IMAGE_NAME >> IMAGE_NAME docker build --build-arg RUNENV=${RUNENV} -t ${IMAGE_NAME} . docker push ${IMAGE_NAME}
(2)docker_deploy.sh
#!/bin/bash PORT=$1 IMAGE=$2 MODULE=$3 echo "update image to: ${IMAGE}" docker stop ${MODULE} # 刪除容器 docker rm ${MODULE} # 減少磁碟空間 刪除映象 docker rmi -f $(docker images | grep ${MODULE}) docker run -d -p ${PORT}:8070 -v /home/logs:/home/logs --name ${MODULE} ${IMAGE}
(3)Dockerfile
FROM airdock/oraclejdk MAINTAINER hmw 1445496485@qq.com ARG RUNENV=${RUNENV} ENV RUNENV=${RUNENV} ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN mkdir -p /var/yjz/demo \ echo ${RUNENV} > /tmp.properties COPY target/demo.jar /var/yjz/demo/app.jar WORKDIR /var/yjz/demo ENTRYPOINT ["java","-jar","app.jar","--spring.profiles.active=${RUNENV}"] # EXPOSE命令只是宣告瞭容器應該開啟的埠並沒有實際上將它開啟! # 我們宣告瞭EXPOSE埠之後,我們使用-P命令進行隨機對映的時候,是會對這個埠進行對映的。 # 比如說我們現在對一個tomcat容器進行EXPOSE 9999宣告,那麼我們進行-P隨機對映的時候是會對9999埠進行對映的。 EXPOSE 8063:8063
(4)expect.sh
#!/usr/expect/bin/expect set timeout -1 # 獲取傳入引數 set pwd [lindex $argv 0] set module [lindex $argv 1] set port [lindex $argv 2] set image [lindex $argv 3] spawn scp $pwd/docker_deploy.sh root@192.168.206.213:/home/service/fesco/$module.sh expect "*password:" send "root\r" spawn ssh root@192.168.206.213 expect "*password:" send "root\r" expect "]# " send "sh /home/service/fesco/$module.sh $port $image $module\r" send "exit\r" expect eof exit
(5)start.sh
#!/bin/bash PORT=$1 MODULE=$2 IMAGE_NAME="192.168.206.212:5000/${MODULE}:1.0.0.RC" echo "目錄:" $(pwd) echo "模組:" ${MODULE} echo "埠:" ${PORT} ./expect.sh $(pwd) ${MODULE} ${PORT} ${IMAGE_NAME}
二、jenkins建立專案
1、新建item——>選擇流水線(PipeLine)。
2、設定引數
3、流水線指令碼
node { stage('checkout_order') { deleteDir() checkout([ $class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [ [ credentialsId: '1a2dc2fc-8eed-46a3-b22d-169a863376ec', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://192.168.206.213/svn/svnrepos/branch/@HEAD' ] ], workspaceUpdater: [$class: 'UpdateUpdater'] ]) } stage("mvn_order") { echo "start compile mvn_common" sh "mvn -DskipTests clean package" } stage("docker_build") { echo "start build image" sh 'chmod 777 ./docker_build.sh' sh './docker_build.sh ${RUNENV} ${MODULE}' } stage("docker_deploy") { echo "deploy on docker" sh 'chmod 777 ./docker_deploy.sh' sh 'chmod 777 ./expect.sh' sh 'chmod 777 ./start.sh' sh './start.sh ${PORT} ${MODULE}' } }
credentialsId:憑據,如下圖所示配置一個
remote 後面填自己的專案svn地址,其他不變。下面這是我的。
指令碼的整個過程:
# 1、svn拉取專案 # 2、編譯maven專案,生成jar包 # 3、docker_build.sh結合DockerFile檔案 生成映象並push到映象倉庫 # 4、執行start.sh 傳入引數(埠號,專案名稱等,這裡可以把版本號作為引數也發來),呼叫expect.sh將212機子上的docker_deploy.sh傳送到213機子上,並登入213機子,啟動docker_deploy.sh, docker_deploy會停止當前容器,刪除容器,刪除映象,從映象倉庫上拉取映象重新生成容器並啟動。
4、新建好之後,構建專案即可。
三、構建過程中的問題:
1、錯誤資訊: unix /var/run/docker.sock: connect: permission denied
解決方案:
# 這個方法只要docker服務重啟, 就需要重新設定一次 cd /var/run/ chmod 777 docker.sock
2、錯誤資訊:java.lang.UnsupportedOperationException: no known implementation of class hudson.scm.SCM is named SubversionSCM
解決方案:
因為沒有安裝svn外掛,去外掛管理中安裝svn
3、錯誤資訊:hudson.remoting.ProxyException: org.tmatesoft.svn.core.SVNAuthenticationCancelledException: svn: E200015: Authentication cancelled
解決方案:
jenkins中新增一個憑據 svn中的使用者
4、錯誤資訊:[ERROR] Could not create local repository at /usr/local/maven-repository -> [Help 1]
解決方案:
沒有找到maven中conf資料夾中的settting.conf配置的倉庫地址,我的是/usr/local/maven-repository。
所以在Jenknis所在的機子上操作,建立倉庫資料夾,並放開許可權
cd /usr/local/ mkdir maven-repository chmod -R 777 /usr/local/maven-repository/
5、錯誤資訊:[ERROR] [ERROR] Some problems were encountered while processing the POMs:
修改jenkins的使用者為root,預設是jenkins
vim /etc/sysconfig/jenkins
重啟jenkins
systemctl restart jenkins
我的倉庫地址是 /usr/local/maven-repository/
chmod -R 777 /usr/local/maven-repository/