折騰了好幾天,終於實現了自動化部署,廢話不多說,直接上乾貨:
先說環境,服務器操作系統是centos8,docker版本19.03.5,所有容器文件放到/data。
因爲要新建maven工程,需要提前安裝好jdk和maven。
第一步:docker search jenkins,找到評星最多的官方鏡像,pull後創建容器,沒想到無法啓動,無奈放棄,選用第二個jenkins/jenkins,此爲第一個坑:-(
第二步:創建容器:
新建目錄 /data/jenkins_home,然後
docker run -d -p 8080:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins
這裏自己挖了一個坑,把/data和/var搞反了,然後成功跳出。
/etc/localtime也是一個坑,實際上使用的是/etc/timezone, 造成後面的容器時間與服務器時間不一致,此坑未填,因爲已經安裝了一堆插件,否則後面還有重來。
docker ps -a 查看容器:
第三步:http://ip:8080, 開始安裝初始化,
cat /data/jenkins_home/secrets/initialAdminPassword,複製密碼後開始
插件安裝時不要安裝推薦插件,因爲:連jenkins官方服務器太慢了!
但可以先安裝一箇中文本地化插件Localization Support Plugin,否則後面改成中文界面比較麻煩!
粗魯的修改方法:
cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
或者在系統設置裏修改,但沒什麼卵用,速度變化不大。
第四步:安裝插件
Folders,SSH,Subversion,maven插件都是必須的,遺漏也沒關係,使用時會有文檔提示你安裝的。
安裝後如果沒有問題,這裏不應該有下圖中的紅色圖標:
安裝Credentials插件時,我降低了一下版本到2.2.0,否則會有衝突,不是所有插件都需要升級到最高版本。
第五步:進入系統管理-全局工具配置:
配置jdk和maven路徑,jdk路徑需要到容器裏用$JAVA_HOME查看。
進入系統管理-系統配置-全局屬性,新增SSH remote hosts,工程運行腳本時會用到。
第六步:新建一個maven工程,實現Springboot項目自動部署
這個網上的文章很多,無非就是設置一下svn地址賬戶密碼,第一次構建時時間長一點,多等一會。麻煩的地方在於通過ssh遠程執行腳本。在Post Steps步驟中選擇Run only if build succeeds,添加
腳本內容:
jarfilename="iqms_test.jar"
pids=`ps -ef | grep $jarfilename | grep -v grep | awk '{print $2}'`
for pid in ${arr[@]}
do
exe_str=`kill -9 $pid`
echo ${exe_str}":"${pid}" is killed."
done
scp -P 9022 root@ip:/data/jenkins_home/workspace/iqms-be-1/iqms-be-1/target/iqms.jar /iqms_beta/iqms_test.jar
/usr/bin/java -jar /iqms_beta/iqms_test.jar
echo "...end..."
第七步:開始構建吧,一般情況下,第一次不可能成功的,我搞了六次,祝大家順利!
另外ssh需要配置免密碼登錄,注意是從jenkins服務器登錄到被部署的服務器上運行,所以要在jenkins服務器上生成rsa密鑰,做複製到被部署的服務器上。但我還是碰到一個問題,ssh無法用新建的用戶名登錄到被部署的服務器,命令行可以,在jenkins裏測試怎麼都不行,難道是密碼太簡單了?還是加密方式不一致?期待大咖幫我解決一下,先謝謝了!