最近覺得打包實在太麻煩了,還容易出錯,就研究了一下自動部署,做下筆記。
1、在linux服務器上安裝docker
這里參考https://www.cnblogs.com/hanfengyeqiao/p/13694680.html 即可。
2、查詢jenkins鏡像
docker search jenkins
3、拉取鏡像,一般來說是拉取使用人數最多的。但是不知道什么原因我拉取官方提供的docker.io/jenkins的時候,在配置過程中總是出現各種奇怪的問題。
拉取docker.io/jenkins的時候需要使用 docker pull docker.io/jenkins:2.60.3 需要添加一個標簽,因為這個鏡像沒有 默認標簽。
我這里是拉取的另外一個: docker pull docker.io/jenkinszh/jenkins-zh
4、啟動鏡像 容器名jenkins1
docker run -d -p 8000:8080 -p 50000:50000 -v /usr/local/jenkins:/var/jenkins_home --name jenkins1 --restart always --privileged=true docker.io/jenkinszh/jenkins-zh
這里使用的是掛載的方式啟動。
ps:這里啟動時,如果訪問不了,就查看日志:docker logs 容器名,如果報錯信息是:touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied。
那么是掛載啟動沒有目錄權限,解決辦法:
1)chmod a+rwx /usr/local/jenkins
2)chmod a+rw /var/run/docker.sock
執行完這兩個命令后,刪除失敗的容器,重新啟動即可。
3)如果是將Jenkins轉移到新的服務器,可能報錯信息為:Failed to delete dirs /var/jenkins_home/war/help/parameter/description_bg.html
解決方法:sudo chown -R 1000:1000 掛載目錄,例如:
sudo chown -R 1000:1000 /usr/local/jenkins
5、訪問8000端口,第一次可能有點久,需要等一會兒。
這里的管理員密碼獲取方式:
1)進入容器jenkins1:docker exec -it jenkins1 /bin/bash
2)獲取密碼: cat /var/jenkins_home/secrets/initialAdminPassword(上面圖片中紅色的目錄)
然后繼續
ps:如果出現已離線的界面:
輸入網址http://xxxxxx:8000/pluginManager/advanced訪問。
進入該頁面后最底下,找到【升級站點】,把其中的鏈接https改成http后提交,若不行就改為:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json並提交。
到這里jenkins就已經部署好了。
6、Jenkins全局工具配置
這里的JAVA_HOME獲取方式:
1)進入容器jenkins1:docker exec -it jenkins1 bash
2) 執行:echo $JAVA_HOME
7、安裝Jenkins對應Maven插件
找到 “系統管理“ - “安裝插件” ,點擊 “可選插件”,找到如下maven插件的版本
插件名稱 Maven Integration
需要登錄服務器執行sh腳本的,還需要安裝ssh插件。
8、新建任務
9、配置任務svn賬號密碼
10、構建觸發器,可自行配置
11、打包
12、正常情況,應用保存后,點擊構建, 第一次構建可能耗時比較長,構建成功后,就能在/var/jenkins_home/workspace/任務名/target 目錄查看到對應的jar包
因為我這里要自動部署,所以得繼續配置。
13、繼續配置環節:Post Steps我這里分為兩部分:
1)本機操作:將構建成功后的jar包,移動到Dockerfile文件所在的目錄
在Post Steps新增一個 執行shell
#!/bin/bash #服務名稱 可自定義 SERVER_NAME=kxrw # 源jar名稱,mvn打包完成之后,target目錄下的jar包名稱,也可選擇成為war包,war包可移動到Tomcat的webapps目錄下運行,這里使用jar包,用nohup java -jar 命令執行 JAR_NAME=kxrw #target 打包生成jar包的目錄 JAR_PATH=/var/jenkins_home/workspace/test-kxrw/target # 打包完成之后,把jar包移動到運行jar包的目錄--->work_daemon,work_daemon這個目錄需要自己提前創建 JAR_WORK_PATH=/var/jenkins_home/probject #刪除原目錄的jar rm -f $JAR_WORK_PATH/kxrw.jar #復制jar包到執行目錄 echo "復制jar包到執行目錄:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH" cp -f $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH echo "復制jar包完成"
2)登錄服務器,進入Dockerfile目錄,編譯鏡像然后打包
這里需要下載ssh相關插件。
找到 “系統管理“ - “系統配置” , “SSH remote hosts”,
新增好后。
在Post Steps新增一個Execute shell script on remote host using ssh
#進入服務器Dockerfile所在目錄 cd /usr/local/jenkins/probject echo "停止正在運行的容器:kxrw1" docker stop kxrw1 echo "刪除容器:kxrw1" docker rm kxrw1 echo "刪除已經存在的Dockerfile生成鏡像文件" docker rmi kxrw echo "編譯Dockerfile生成鏡像文件" docker build -t kxrw -f Dockerfile . echo "運行容器:kxrw" docker run -d -p 8088:8080 --name kxrw1 --restart=always kxrw:
Dockerfile文件的內容參考https://www.cnblogs.com/hanfengyeqiao/p/14768499.html
這里為什么要分兩步呢,因為在jenkins是在docker內的容器,如果要在jenkins內部執行宿主機命令需要配置其他東西有點麻煩。我這里偷了一個懶,重新登錄當前服務器,進入對應目錄即可執行命令。
到這里一個自動化打包流程就配置好了,如果有個性化的需求調整構建后執行的腳本即可。