jenkins + docker + github 實現自動化部署



前言

之前做了個qq機器人,添加新功能之後老是需要手動重新部署,儘管寫了shell腳本來rebuild,但是還是手動啊!
so,有沒有嘛工具可以讓我提交完代碼自動打包,自動部署運行?
這就想起來之前用的jenkins,但可惜沒用過幾次,加上過去兩三年基本忘光了,這回撿起來再實操一下。
本文主要圍繞jenkins來說明如何實現自動化部署步驟,不會詳細說明docker還有github操作以及相關代碼。

整體思路:

push codeㅤ
listenerㅤ
buildㅤ
localㅤ
githubㅤ
jenkinsㅤ
dockerㅤ


安裝jenkins

docker run -d --restart=on-failure:3 --name jenkins_954L -u root \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/dockerinfo/jenkins:/var/jenkins_home \
-p 28080:8080 -p 50000:50000 jenkinszh/jenkins-zh

稍微解釋一下上述的關鍵命令

-u root
# 使用root身份去運行,避免無法執行宿主機的docker命令

-v $(which docker):/usr/bin/docker
# 將宿主機的docker命令目錄掛載到jenkins容器內部
# $(which docker):動態獲取當前docker命令目錄

-v /var/run/docker.sock:/var/run/docker.sock
# 掛載docker容器進程通信文件到容器內
# docker.sock文件官方解釋:It’s the unix socket the Docker daemon listens on by default and it can be used to communicate with the daemon from within a container.

-v /usr/local/dockerinfo/jenkins:/var/jenkins_home
# 掛載jenkins的數據目錄

jenkinszh/jenkins-zh
# 爲什麼沒用jenkins鏡像,而用jenkins-zh?
# 看這個-zh也很明白了,這是中文的意思。
# 主要目的不止這個,因爲jenkins的插件默認下載地址是:https://www.google.com/,這個在國內無法訪問的。
# 而jenkins中文社區提供的-zh的鏡像默認的下載地址是國內鏡像地址。
# 也有很多別人基於jenkins二次打包,這些坑都填好了,但是我個人比較喜歡用官方的東西,不喜歡別人二次打包的鏡像。
# 主要裏面可能加了作者認爲你需要但你並不需要的插件或者其他服務在裏頭,我比較喜歡自己搞。
# jenkins中文社區地址:https://jenkins-zh.cn/

掛載docker目錄到jenkins內部的原因是因爲我需要在jenkins容器裏打包項目爲docker鏡像運行在宿主機的docker中。也就是說在jenkins的docker容器裏操作宿主機的docker命令實現部署項目


接下來可直接訪問:http://ip:28080/
首次訪問需要驗證一下文件,直接進入容器然後查看文件,把內容copy到輸入框後敲回車即可

[root@VM_16_14_centos ssl_key]# docker exec -it jenkins_954L bash
root@b9cf4ff1c921:/# cat /var/jenkins_home/secrets/initialAdminPassword





設置中文

步驟:Manage Jenkins -> Manage Plugins -> filter搜索:Chinese





配置JDK

進入jenkins容器輸出jdk安裝目錄進行配置

[root@VM_16_14_centos ~]# docker exec -it jenkins_954L bash
root@cd7ea7fed8f4:/# echo $JAVA_HOME
/usr/local/openjdk-8

步驟:系統管理 -> 全局工具配置 -> JDK


安裝Maven

步驟:系統管理 -> 全局工具配置 -> Maven


配置Maven插件

步驟:Manage Jenkins -> Manage Plugins -> filter搜索:Maven Integration




配置Git用戶

步驟:系統管理 -> Manage Credentials -> 點擊提供者(jenkins)-> 點擊全局憑證 -> 添加憑據


注:用戶名跟密碼並不是github的登陸賬號密碼,而是拉取git的用戶名密碼。
至於ID就隨便填就行,這個是jenkins的憑證標識



發佈自動部署任務

1.選擇:構建一個Maven項目

2.配置項目git倉庫

Credentials選擇剛剛在全局憑證添加的git用戶

3.配置構建觸發器

5分鐘檢查一次源碼,有差異則執行任務構建
SCM 格式說明

首先格式爲:* * * * (五個星)
第一個
表示分鐘,取值0~59
第二個表示小時,取值0~23
第三個
表示一個月的第幾天,取值1~31
第四個表示第幾月,取值1~12
第五個
表示一週中的第幾天,取值0~7,其中0和7代表的都是週日
使用舉例:
每隔10分鐘構建一次:H/5 * * * *
每隔1小時構建一次: H H/1 * * *
每月30號構建一次: H H 30 * *

4.配置構建命令

5.將Dockerfile文件拷貝到jenkins容器內部

docker cp Dockerfile jenkins_954L:/var/jenkins_home/workspace/robot-954L/

/var/jenkins_home/workspace/:是jenkins的工作目錄,每個任務對應下面一個子目錄

Dockerfile內容

FROM java:8-alpine
ADD target/qq-robot.jar qq-robot.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/qq-robot.jar"]

5.編寫構建完成之後觸發的shell腳本

#!/bin/bash
echo "開始構建robot-954L"

CID=$(docker ps | grep "qq-robot-server_954L")
if [ "$CID" != "" ];then
        echo "刪除現有容器"
        docker stop qq-robot-server_954L
        docker rm qq-robot-server_954L
fi

docker rmi qq-robot-server
echo "執行Dockerfile"
cd /var/jenkins_home/workspace/robot-954L
docker build -t qq-robot-server .
echo "構建容器"
docker run -d --restart=on-failure:3 --name qq-robot-server_954L -p 18080:8080 qq-robot-server
echo "執行完成"


立即構建



一切順利。當然有些坑,我自己填了。
接下來提交一下代碼,看觸發器是否生效,自動打包部署…這裏就不演示了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章