docker版jenkins持續整合部署及連線gitee碼雲

x286129277發表於2020-12-27

docker版jenkins

安裝docker社群版

官方文件:https://docs.docker.com/install/linux/docker-ce/centos/

第一步:安裝依賴軟體(yum-utils提供yum-config-manager包,用來管理yum配置檔案)

yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2

第二步:新增docker-ce安裝源

yum-config-manager \
            --add-repo \
            https://download.docker.com/linux/centos/docker-ce.repo

第三步:安裝docker-CE 預設安裝的是最新版本的穩定版 yum install docker-ce 如果要安裝特定版本的docker-CE請使用如下命令格式: install docker-ce-<VERSION STRING> 檢視版本列表請使用如下命令: yum list docker-ce --showduplicates | sort -r

第四步:配置 配置docker服務開機啟動 systemctl enable docker 配置映象加速器(映象加速地址我用的是阿里雲的)

#修改映象地址後,複製下面一坨直接丟掉centos執行
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的阿里雲映象地址"]
}
EOF
#配置生效
systemctl daemon-reload
#重啟docker
systemctl restart docker
#驗證映象加速器是否修改成功
docker info 
  • 配置阿里雲的docker映象加速器

docker常用命令如下:

#CENTSOS7開啟docker
systemctl start docker
​
#docker檢視所有容器(執行的和沒執行的)
docker ps -a
​
#刪除容器
docker container rm 5156e78a4e9e
​
#docker檢視映象
docker images
​
#docker刪除映象
docker rmi e76a6ec6e22e
​
#docker 進入容器
docker exec -it 775c7c9ee1e1 /bin/bash  

jekins

 

第一步:下載jekins

本文使用docker版的jekins,方便

docker pull jenkins/jenkins:lts  #這個是安裝最新版的jenkins,如果安裝舊版本,很多外掛安裝不上,docker環境下升級又比較麻煩。
docker inspect ba607c18aeb7 #檢視是否是最新版 

第二步:啟動jekins

mkdir -p /export/service/jenkins_home #建立一個jenkins目錄 
chmod 777 -R /export/service/jenkins_home #jekins會使用jekins使用者往該目錄寫入資料
​
mkdir -p /export/service/repository/ #建立maven倉庫,用於構建maven專案下載的jar包
chmod 777 -R /export/service/repository/  #必須授權,要不然沒有許可權寫
​
docker run -d -p 9988:8080 -p 50000:50000 \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/mv:/usr/bin/mv \
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java \
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 \
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \
-v /export/service/repository:/export/service/repository \
-v jenkins:/export/service/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins jenkins/jenkins:lts
​
#引數簡介
-v /usr/bin/docker:/usr/bin/docker  有了這個配置在docker容器內部可以使用docker命令
-v /usr/bin/mv:/usr/bin/mv   有了這個配置在docker容器內部可以使用mv命令
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java,這個配置可以再在docker容器內部使用java命令(直接使用宿主機的java)
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 這個配置會在docker容器建立/usr/java/jdk1.8.0_131目錄,並對映到宿主機的java_home目錄
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9這個配置會在docker容器建立/export/service/apache-maven-3.3.9目錄,並對映到宿主機的maven_home目錄
/export/service/repository:/export/service/repository這個配置會在docker容器建立/export/service/repository目錄,並對映到宿主機的/export/service/repository目錄
-v /etc/localtime:/etc/localtime 使用宿主機的時間(宿主機和容器時間同步)
-d 後臺執行映象
-p 9988:8080 將映象的8080埠對映到伺服器的9988埠
-p 50000:50000 將映象的50000埠對映到伺服器的50000埠
--name jenkins 給容器起一個別名
​
​
​
為什麼要掛載(對映)目錄:docker通過映象建立並啟動容器,一個容器就是一個獨立隔離的沙箱,所以並不能識別伺服器上的環境配置,需要我們在啟動容器時通過-v引數命令將伺服器目錄掛載到docker容器指定目錄!拿jenkins舉例來說,如果你是用docker執行的jenkins,那麼是不識別你伺服器上配置的jdk環境和maven環境的,你在jenkins裡系統配置中去填寫你伺服器上的jdk目錄和maven目錄以及配置檔案目錄,後面專案構建是肯定會報錯不識別的。jenkins所在的容器是docker某個具體容器,它只能識別出這個容器裡的東東,容器自己有一套獨立完整的目錄,可以通過命令 docker exec -it containerID /bin/bash 進入指定的容器id檢視(containerID換成你的docker容器id)。
​
#如果目錄掛載完成,啟動了容器,又想修改掛載怎麼辦?
參考:https://blog.csdn.net/zedelei/article/details/90208183

第三步:jekins外掛安裝

在瀏覽器輸入http://ip:9988進入Jenkins登入頁面。頁面會提示你到伺服器的指定位置獲取初始化密碼。

  • 這一步大概要等個5-10分鐘。

注意:因為我們是docker版的jenkins,所以這個路徑不是伺服器的路徑,而是容器內的路徑。我們可以通過如下命令從容器中獲取到初始化密碼。
docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword
在頁面輸入密碼,點選Continue,進入外掛安裝頁面。安裝推薦外掛就好。

  • 選擇【安裝推薦的外掛】,如下圖,耐心等待各外掛安裝完成。

    • 注意:這步外掛下載速度快慢取決於伺服器的網速,與本地網路環境無關

第四步:建立jekins賬戶

安裝好外掛後,系統會提示建立管理員賬戶。

第五步:配置jdk和maven

管理->Global Tool Configuration

配置JDK,
注意:這裡配置的是jekins的jdk,由於jekins掛載目錄和宿主機目錄相同,所以別以為是宿主機目錄,一定是jekins的jdk目錄,jekins的jdk目錄對映到宿主機目錄
/usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131

配置maven

注意:這裡配置的是jekins的maven,由於jekins掛載目錄和宿主機目錄相同,所以別以為是宿主機目錄,一定是jekins的maven目錄,jekins的maven目錄對映到宿主機目錄

-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \

第六步:整合碼雲(Gitee)

gitlab+jekins是企業套餐,但是為了偷懶就不安裝gitlab了 直接使用碼雲

詳細資訊參考:https://gitee.com/help/articles/4193

6.1:安裝Gitee外掛

6.2:配置外掛

6.3 配置git私人令牌

6.3.1 新增憑據

6.3.2 碼雲官網上,生成一個令牌

第七步:新建maven任務

7.1:建立任務(構建maven專案)

  • 新增maven外掛

7.2:配置原始碼管理

怎麼新增賬戶,看下面截圖:

7.3:構建觸發器

意思是:滿足什麼條件就觸發我們任務的構建

下圖我選擇的是,只要有程式碼提交到碼雲就開始構建(其實這種方式不太推薦,萬一提交到碼雲的是半成品程式碼,觸發構建就會報錯)

建議:最好選擇手動構建,言外之意這裡什麼都不勾選

7.4:編譯【build】

Build指定原始碼拉下來之後需要做的事情,Post Steps指定編譯好之後需要做的事情。

  • 上面填寫的Goals and options命令

clean install -Dmaven.test.skip=true

 

7.5:編譯之後操作【Post Steps】

  • 進行下面的操作前,要先新增[ssh]外掛

編譯之後要做的事情 1:將編譯後的jar傳送到目的地伺服器【使用SSH Publishers】 2:執行jar,啟動工程【使用shell指令碼】

SSH Publishers是專業將編譯好的產物傳送到目的地的外掛。使用外掛之前需要配置外掛,如下圖:

  • 配置你【碼雲】上的程式碼與配置的SSH服務進行關聯

# 必須加,不然jekins會kill 應用程式
export BUILD_ID=dontKillMe
# 應用存放地址
APP_HOME=/export/server/
# 應用名稱
APP_NAME=jdy_manager_web-0.0.1-SNAPSHOT.jar
 # 獲取PID
PID=$(ps -ef |grep ${APP_NAME} |grep -v grep |awk '{print $2}')
 if [ -z "${PID}" ]; then
        echo "程式不存在啟動程式"
        cd  ${APP_HOME}
        chmod 777 ${APP_NAME}
       source /etc/profile
       #防止nohup.out檔案過大
       cat /dev/null > nohup.out 
       nohup java -jar  ${APP_NAME}  --spring.profiles.active=dev &
        if [ $? = 0 ];then
            sleep 1
            tail -n 50 nohup.out
        fi
        echo "finished!!!"
else
         echo "程式已經存在殺死程式"
         kill -9 ${PID}
        echo "${APP_NAME} process stop, PID=${PID}"
        cd  ${APP_HOME}
        chmod 777 ${APP_NAME}
        source /etc/profile 
        #防止nohup.out檔案過大
        cat /dev/null > nohup.out
        nohup java  -jar  ${APP_NAME}  --spring.profiles.active=dev &
if [ $? = 0 ];then
            sleep 1
            tail -n 50 nohup.out
        fi
        echo "finished!!!"  
 fi

7.6:執行構建

#編譯好的jar在docker容器裡面,具體目錄如下:
#進入容器
docker exec -it 89f7dc9c71a7 /bin/bash
#切換到workspace目錄
jenkins@89f7dc9c71a7:/$ cd /var/jenkins_home/workspace/
jenkins@89f7dc9c71a7:~/workspace$ ls

第八步:專案首次啟動效果

  • 專案首次啟動時,docker虛擬機器會聯網下載專案所依賴jar包

  • 啟動成功後,嘗試遠端訪問伺服器上的工程,效果如下

 

總結

相關文章