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