第10章 Docker 中 Jenkins 的安裝與配置
第10章 Docker 中 Jenkins 的安裝與配置
文章目錄
前言
- 為什麼要使用 Jenkins ?
具體請參考我的第05章內容。
- 什麼是 Jenkins?
具體請參考我的第05章內容。
- 什麼是 Docker?
具體請參考我的第08章內容。
- 為什麼要在 Docker 中安裝 Jenkins?
為了開發環境一致性、可移植性、易於管理和維護性。
目標
- 完成 Jenkins 在 Docker 中的安裝與配置。
- 安裝在 Docker 中的 Jenkins 能正常對外提供服務。
- 在外部開發環境中能正常訪問和使用 Jenkins 持續整合服務。
環境
- **VMware:**VMware Workstation 14 Pro
- **Linux:**CentOS7.4
- **Docker:**18.06.0-ce, build 0ffa825
- **Jenkins:**Jenkins2.121.1
- **JDK:**jdk1.8.0_172
安裝
Docker
Docker是一個在稱為“容器”(或Docker容器)的隔離環境中執行應用程式的平臺。像Jenkins這樣的應用程式可以作為只讀“映象”(或Docker映象)下載,每個應用程式都作為容器在Docker中執行。 Docker容器實際上是Docker映象的“執行例項”。從這個角度來看,影象被或多或少地永久儲存(即,只要釋出映象更新),而容器被臨時儲存。在Docker文件的入門指南,第1部分:方向和設定頁面中閱讀有關這些概念的更多資訊 Getting Started, Part 1: Orientation and setup 。
Docker的基礎平臺和容器設計意味著可以在任何支援的作業系統(macOS,Linux和Windows)或執行Docker的雲服務(AWS和Azure)上執行單個Docker映像(對於任何給定的應用程式,如Jenkins) 。
關於 Docker的安裝與配置,具體請參考我的第08章內容。
在Docker中下載並執行Jenkins
Jenkins有幾個Docker映象可用。
建議使用的Docker映象是 jenkinsci/blueocean
image (來自 Docker Hub repository )。此r映象包含與所有Blue Ocean外掛和功能捆綁在一起的Jenkins(可隨時投入生產)的當前長期支援(LTS) Long-Term Support (LTS) release of Jenkins 版本。這意味著您無需單獨安裝Blue Ocean外掛。
每次釋出新版Blue Ocean時都會發佈一個新的
jenkinsci/blueocean
映象。您可以在標籤頁面上看到以前釋出的jenkinsci /blueocean
映象版本列表。您還可以使用其他Jenkins Docker映象(可通過Docker Hub上的
jenkins/jenkins
訪問)。但是,這些不適用於Blue Ocean,需要通過Jenkins中的Manage Jenkins > Manage Plugins 頁面進行安裝。在Blue Ocean入門( Getting started with Blue Ocean )中瞭解更多相關資訊。
下載映象並執行容器
下載jenkinsci/blueocean
映象並使用以下docker run命令在Docker中將其作為容器執行:
sudo docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
引數說明
1、–rm
(可選)在關閉時自動刪除Docker容器(下面是jenkinsci/blueocean
映像的例項化)。如果您需要退出Jenkins,這可以保持整潔。
2、-d
(可選)在後臺執行jenkinsci/blueocean
容器(即“分離”模式)並輸出。
容器ID。如果未指定此選項,則會在終端視窗中輸出正在執行的此容器的Docker日誌。
3、-p
對映(即“釋出”)jenkinsci/blueocean
容器的埠8080到主機上的埠8080。第一個數字表示主機上的埠,而最後一個表示容器的埠。因此,如果為此選項指定了-p 49000:8080,則將通過埠49000訪問主機上的Jenkins。
4、-p
(可選)將jenkinsci/blueocean
容器的埠50000對映到主機上的埠50000。只有在其他計算機上設定了一個或多個基於JNLP的Jenkins代理時,才需要這樣做, 它反過來與jenkinsci/blueocean
容器互動(充當“主”Jenkins伺服器,或簡稱為“Jenkins master”)。基於JNLP的Jenkins代理預設通過TCP埠50000與Jenkins主機通訊。
您可以通過“配置全域性安全性”頁面更改Jenkins主伺服器上的此埠號。如果你要將JNSLP代理的Jenkins master的TCP埠值更改為51000(例如),那麼你需要重新執行Jenkins(通過這個docker run …命令)並指定這個“釋出”選項,例如 - p 52000:51000,其中最後一個值與Jenkins主伺服器上的此更改值匹配,第一個值是Jenkins主伺服器主機上的埠號,基於JNLP的Jenkins代理通過該埠號與Jenkins主伺服器進行通訊 - 即52000。
5、-v
(可選但強烈建議)將容器中的/var/jenkins_home
目錄對映到名為jenkins-data
的Docker卷。如果此卷不存在,則此docker run命令將自動為您建立卷。 如果您希望每次重新啟動Jenkins時都希望Jenkins狀態保持不變(通過此docker run …命令),則需要此選項。如果未指定此選項,則Jenkins將在每次重新啟動後有效地重置為新例項。
注意:jenkins資料卷也可以使用docker volume create命令獨立建立:
docker volume create jenkins-data
您可以將此目錄對映到計算機本地檔案系統上的目錄,而不是將
/var/jenkins_home
目錄對映到Docker卷。例如,指定選項-v $ HOME/jenkins:/var/jenkins_home
會將容器的/var/jenkins_home
目錄對映到本地計算機上$ HOME目錄中的jenkins子目錄,該子目錄通常是/Users/<your-username>/jenkins
或/home/<your-username>/jenkins
。
6、-v
(可選)/var/run/docker.sock
表示Docker守護程式通過其偵聽的基於Unix的 Socket。此對映允許jenkinsci/blueocean
容器與Docker守護程式通訊,如果jenkinsci/blueocean
容器需要例項化其他Docker容器,則需要該守護程式。如果執行語法包含具有docker引數的代理程式部分的宣告性管道,則此選項是必需的 - 即
agent {docker {...}}
。在 Pipeline Syntax 頁面上閱讀更多相關資訊。
7、jenkinsci/blueocean
jenkinsci/blueocean
Docker映象本身。如果尚未下載此映像,則此docker run命令將自動為您下載映像。此外,如果自上次執行此命令後釋出了對此映像的任何更新,則再次執行此命令將自動為您下載這些已釋出的映像更新。
注意:也可以使用
docker pull
命令獨立下載(或更新)此Docker映象:
docker pull jenkinsci/blueocean
注意:以下是我的安裝執行命令,請嘗試複製並貼上此無註釋版本:
sudo docker run \
-u root \
--name jenkins \
--rm \
-d \
-p 8082:8082 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
安裝過程與結果如下:
$ sudo docker run \
> -u root \
> --rm \
> -d \
> -p 8082:8082 \
> -v jenkins-data:/var/jenkins_home \
> -v /var/run/docker.sock:/var/run/docker.sock \
> jenkinsci/blueocean
Unable to find image 'jenkinsci/blueocean:latest' locally
latest: Pulling from jenkinsci/blueocean
8e3ba11ec2a2: Pull complete
311ad0da4533: Pull complete
df312c74ce16: Pull complete
fa12f39dbf9b: Pull complete
5e2bfe6e0b85: Pull complete
dcc378c45959: Pull complete
6168b5a9b059: Pull complete
b565cf385df2: Pull complete
2d2686a6be13: Pull complete
3d837057ffd5: Pull complete
a9c46c3a3555: Pull complete
a989f45875e3: Pull complete
40460b4b9619: Pull complete
20a73c4ba560: Pull complete
fec014e5ba66: Pull complete
7a82cb3e4138: Pull complete
Digest: sha256:102b2cc94569d7f1f38f5473462ea3748edf0d8e9d70288616bbd1e5e6c68be3
Status: Downloaded newer image for jenkinsci/blueocean:latest
7a46a653df27097c7daf4a3ba60ee51a19923c5232efafb81019ae196dcada37
開放埠
## 開啟 8082 埠
[ringyin@node1 ~]$ sudo firewall-cmd --zone=public --add-port=8082/tcp --permanent
[ringyin@node1 ~]$ sudo firewall-cmd --reload ## 重啟防火牆
繼續安裝後設置嚮導
相關的設定嚮導與在虛擬機器安裝配置一樣,具體參考我的第05章內容,也可參考官方文件,連結地址: Post-installation setup wizard
訪問Jenkins/Blue Ocean Docker容器
如果您對Docker有一些經驗,並且希望或需要使用docker exec命令通過終端/命令提示符訪問jenkinsci/blueocean
容器,則可以新增一個選項,如--name jenkins-blueocean
(上面執行的docker) ,這將給jenkinsci/blueocean
容器命名為“jenkins-blueocean
”。
這意味著您可以使用docker exec命令訪問容器(通過單獨的終端/命令提示符視窗),如:
sudo docker exec -it jenkins-blueocean bash
可以修改我們想要的容器名稱。
列出所有容器
$ sudo docker ps
CONTAINER ID IMAGE ... PORTS NAMES
7a46a653df27 jenkinsci/blueocea ... 8080/tcp, 50000/tcp, 0.0.0.0:8082->8082/tcp modest_raman
重新命名容器稱
$ sudo docker rename modest_raman jenkins
退出容器
如果要正常退出不關閉容器並保持容器執行狀態,請按Ctrl+P+Q進行退出容器。
$ Ctrl+P+Q
如果使用exit退出,那麼在退出之後會關閉容器,可以使用下面的流程進行恢復
-
使用docker restart命令重啟容器
$ sudo docker restart jenkins
-
使用docker attach命令進入容器
$ sudo docker attach jenkins
通過Docker日誌訪問Jenkins控制檯日誌
您可能需要訪問Jenkins控制檯日誌,例如,在安裝後設置嚮導(Post-installation setup wizard. )中 Unlocking Jenkins 時。
如果您沒有使用上面的docker run ...
命令指定分離模式選項-d
,則可以通過執行此Docker命令的終端/命令提示符視窗輕鬆訪問Jenkins控制檯日誌。
否則,您可以使用以下命令通過jenkinsci/blueocean
容器的Docker日誌訪問Jenkins控制檯日誌:
$ sudo docker logs jenkins
您可以使用docker ps
命令獲取<docker-container-name>
。如果你指定了 - 上面的docker run ...
命令中的--name jenkins-blueocean
選項(另請參閱 Accessing the Jenkins/Blue Ocean Docker container 容器),您只需使用docker logs命令:
$ sudo docker logs jenkins
訪問Jenkins主目錄
例如,您可能需要訪問Jenkins主目錄,以檢查workspace
子目錄中Jenkins構建的詳細資訊。
如果您將Jenkins主目錄(/var/jenkins_home
)對映到計算機本地檔案系統上的目錄(即上面的docker run ...
命令),那麼您可以通過計算機的常用終端/命令提示符訪問該目錄的內容。
否則,如果在docker run …命令中指定了-v jenkins-data:/var/jenkins_home
選項,則可以使用docker exec
命令通過jenkinsci/blueocean
容器的終端/命令提示符訪問Jenkins主目錄的內容:
$ sudo docker exec -it <docker-container-name> bash
如上所述,可以使用docker ps
命令獲取<docker-container-name>
。如果你指定了 - 上面的docker run ...
命令中的--name jenkins-blueocean
選項(另請參閱訪問Jenkins / Blue Ocean Docker容器),您只需使用docker exec
命令:
$ sudo docker exec -it jenkins-blueocean bash
WAR檔案
Jenkins的Web應用程式ARchive(WAR)檔案版本可以安裝在支援Java的任何作業系統或平臺上。
要下載並執行Jenkins的WAR檔案版本:
- 將最新的穩定Jenkins WAR檔案(latest stable Jenkins WAR file)下載到計算機上的相應目錄中。
- 開啟下載目錄的終端/命令提示符視窗。
- 執行命令
java -jar jenkins.war
。 - 瀏覽到
http://localhost:8080
並等待Unlock Jenkins頁面出現。 - 繼續下面的安裝後設置嚮導(Post-installation setup wizard )。
筆記:
- 與在Docker中使用Blue Ocean下載和執行Jenkins(上圖)不同,此過程不會自動安裝Blue Ocean功能,需要通過Jenkins中的 Manage Jenkins > Manage Plugins 頁面單獨安裝。在Blue Ocean入門頁面上閱讀有關安裝Blue Ocean( Getting started with Blue Ocean)的詳細資訊。
e Ocean功能,需要通過Jenkins中的 Manage Jenkins > Manage Plugins 頁面單獨安裝。在Blue Ocean入門頁面上閱讀有關安裝Blue Ocean( Getting started with Blue Ocean)的詳細資訊。- 您可以在執行
java -jar jenkins.war
命令時通過指定--httpPort
選項來更改埠。例如,要通過埠9090訪問Jenkins,請使用以下命令執行:java -jar jenkins.war --httpPort=9090