天天看點

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部署的話,流程大概一樣,隻是不需要壓縮和解壓而已。

讀後感

來這裡找我交流

  • QQ群:330374464
  • 公衆号:軟體測試資源站(ID:testpu)
  • CSDN:https://blog.csdn.net/mcfnhm
  • 語雀:https://www.yuque.com/testpu/pro

主攻測開及接口自動化方向,分享爬蟲擷取的稀缺精品資源,歡迎關注微信擷取。