Docker 搭建 Jenkins 持續集成自動化構建環境


1、Docker鏡像拉取 Jenkins 環境命令

docker pull jenkins/jenkins:lts

查看下拉取的鏡像

docker images

2、通過容器編排方式構建 Jenkins 容器

創建對應目錄

# 創建對應目錄
mkdir -p /data/jenkins/jenkins_home/
chown -R 1000:1000 /data/jenkins/jenkins_home/
 
+ data
- docker-compose.yml  // docker-compose執行文件
+ /data/jenkins
- jenkins_home       // Jenkins掛載卷

docker-compose.yml文件配置

version: "3"
services:
  jenkins:
  	user: root
  	restart: "always"
    image: jenkins/jenkins:lts
    container_name: jenkins
    privileged: true
    ports:
      - 8080:8080
      - 50000:50000    
    environment:
      JAVA_OPTS: -Duser.timezone=Asia/Shanghai
    volumes:
      - /data/jenkins/jenkins\_home/:/var/jenkins\_home
      - /data/jenkins/workspace/:/root/.jenkins/workspace \
      - /usr/local/apache-maven-3.6.0:/usr/local/maven
      - /usr/local/maven/maven-3.6.0/repository:/usr/local/maven/repository
      - /usr/local/jdk1.8.0_211:/usr/local/jdk
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/localtime:/etc/localtime
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
      - /usr/lib/x86\_64-linux-gnu/libltdl.so.7:/usr/lib/x86\_64-linux-gnu/libltdl.so.7
      - /root/.ssh:/root/.ssh # (可選)免密配置時,公鑰可以直接在本地配置

3、啟動容器環境

需要進入 compose 目錄下面輸入以下命令,進行環境的啟動

docker-compose up -d

4、docker-compose 其它操作

鏡像內容器進行操作后可以保存成新的鏡像,比如容器內安裝了jdk、配置了環境變量可以保存為新的鏡像

# 找出當前運行的容器ID
docker ps
 
# 根據containerId,創建新鏡像
docker commit 5d81d56b18b6 jenkins/jenkins:centos.v1

修改 docker-compose 可以對創建的容器根據新鏡像進行修改

version: "3"
services:
  jenkins:
  	user: root
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
      - 50000:50000
    restart: "always"
    container_name: jenkins
    environment:
      JAVA_OPTS: -Duser.timezone=Asia/Shanghai
      #比如新增環境變量
      java_home = xxx 僅做舉例
    volumes:
      - /home/jenkins/jenkins\_home/:/var/jenkins\_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
    privileged: true

刪除之前的容器

docker-compose down

重啟成新的容器

docker-compose up -d

5、配置 Jenkins

前提,Jenkins 部署應用到遠程服務器上,必須要實現 Jenkins 服務器免密登錄到遠程服務器上,同時遠程服務器也要免密登錄到 Jenkins 服務器上拷貝對應的jar包。所以,配置 Jenkins 前保證兩台服務器互相免密登錄。這塊配置,可以查看我之前寫的文字 [ Linux系統兩台機器互免密登錄 ],很簡單。

5.1首先配置 ssh 插件

1、安裝 ssh 相關的插件,直接在插件中心搜索 ssh 然后按裝如下兩個插件

①插件,主要用於鏈接遠程服務器全局配置(公共配置);

②插件,主要用於鏈接遠程服務器傳文件配置,在項目里配置。

2、全局配置 Publish over SSH,系統管理->系統配置,下拉找到即可

第1個標注的地方,如果生成私鑰的時候,沒設置密碼,不用填寫任何內容留空即可;

第2個標注的地方,遠程服務器的別名,隨意起;

第3個標注的地方,遠程服務器的地址;

第4個標注的地方,遠程服務器的賬號名稱(登錄名);

第5個標注的地方,遠程服務器上要放置應用的目錄,這里需要注意,后期項目配置的時候填寫的目錄跟這個是拼接的。

第6個標注的地方,點擊高級后,展開下面的填入項。

第1個標注的地方,遠程服務器的密碼

第2個標注的地方,遠程服務器的私鑰。

3、項目(job)配置 ssh 插件相關的內容-前端VUE

新建一個job,輸入名稱,選擇流水線項目,點擊確定。

這里只演示,構建這個步驟的配置,其它配置很簡單,自己網上一搜就可以。

上面的截圖①,對應截圖下面①、②兩個步驟。

構建配置第一步,Jenkins 打包項目前端應用:

上圖第1個標注地方,shell腳本如下。

#!/bin/bash
cd /data/jenkins/jenkins_home/workspace/data/xxx-all/xxx-admin 
#這個目錄也可寫成如下這樣,不同Jenkins版本可能有所不同,相對與打包工程的下一級目錄開始。
./dev-xxx
npm install
npm run build
cd dist
tar -cvf dev-xxx.tar *

腳本,

第2行表示,Jenkins 服務期切換目錄到 Jenkins 配置的 workspace 目錄下的項目工程目錄下。

第5、6行,前端應用打包命令。

第7行,切換到 dist 目錄,(Jenkins打包前端應用后自動生成這個目錄,打包的結果都在這個目錄下)

第8行,將 dist 目錄下的所有內容打包(*很重要),方便傳輸到遠程服務器(部署服務器)。

構建配置第二步,將打包結果上傳到遠程服務器;

上面5個配置,逐一解釋如下,這里如果配置不好,項目根本無法部署到遠程服務器上。

①,遠程服務器的名稱(別名),前面全局配置的時候已經設置過了,這里下拉選擇。

②,打包結果(源文件)的目錄地址,即,Jenkins 上打包后產生的內容放置的地方,這個目錄很容易填錯,會把你搞死。該目錄是Jenkins主目錄下的工程目錄開始的,即工程目錄下一級開始填寫。

③,刪除前綴,要不然你的遠程服務器又會創建dist這個目錄。

④,遠端目錄,這里需要注意,我上面配置全局(公共配置)ssh的時候,已經填寫了應用部署的遠端目錄,https://www.yuque.com/u21187464/cf/bo7lzr#GsmxQ 這里的第5個標記,此處是基於全局公共配置的目錄的拼接。

⑤,將遠程服務器執行的命令,如果是前端VUE項目,就是解壓上面打包的項目,腳本如下。

腳本寫法一:
# cd /data/xxx-all/xxx-admin/dev-xx.tar
# tar -zxvf dev-xx.tar 
 
腳本寫二(理論上面的寫法沒問題,我驗證Jenkins會報錯):
tar -xvf /data/xxx-all/xxx-admin/dev-xx.tar -C /data/xxx-all/xxx-admin/

腳本說明,

第一行,切換目錄到遠程服務器部署應用的目錄,

第二行,解壓應用包。

這里總結下上面配置的源文件(Sourec files)這個目錄,很多坑。

Jenkins 構建后會在其工作空間 workspace 目錄下產生對應項目的文件夾(這個文件夾名字是創建項目時命名的項目名,如下圖),此時 workspace 目錄下就會有api-dev這樣的文件夾,

所以,源文件目錄里填寫的是這個文件夾之后的目錄,不要把這個文件夾也填寫

4、項目(job)配置 ssh 插件相關的內容-java-jar包

因為上面講過了,這里直接截圖展示下,

Jenkins 構建后其工作目錄產生的 api 項目目錄如下。

①標識的地方,意思是先構建運行完成后,再傳輸jar包到遠程服務器,我這里構建指 maven 構建后在傳輸。

②標識的地方,源文件目錄,上面講過了,api項目名稱后面的目錄開始填寫。

③標識的地方,刪除前綴,jar包前面的目錄都刪除,要不然遠程服務器上會創建這個目錄。

6、總結

1、Jenkins 編譯構建后,需要將應用包(jar包、war包等)部署到遠程服務器上,所以,必須保證 Jenkins 服務器和遠程服務器互相免密訪問,配置上面已經說過了。

2、如果你的 Jenkins 服務器和應用服務器部署在 docker 容器里的話,需要保證兩個容器互相免密登錄,具體配置跟上面提到的配置一樣,只是需要在容器里操作而已。

3、上面 Jenkins 打包配置我舉例的是前端 vue 打包的結果,壓縮成壓縮包和上傳部署到遠程服務器的過程,如果api部署的話,流程大概一樣,只是不需要壓縮和解壓而已。


讀后感

來這里找我交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM