1. 程式人生 > >Docker 以 docker 方式運行 jenkins

Docker 以 docker 方式運行 jenkins

color drop zoom 進行 運行 you plaintext -type 端口

https://testerhome.com/topics/5798
Docker 以 docker 方式運行 jenkins

jmcn · 2016年08月26日 · 最後由 blueshark 回復於 2016年09月06日 · 3600 次閱讀 本帖已被設為精華帖!

簡介說明

docker 是官方推薦的一種 jenkins 啟動方式。

技術分享圖片

打開 jenkins 的官網,點擊進入的是:

  • https://hub.docker.com/r/jenkinsci/jenkins/

裏面是 weekly releases 的鏡像,對於官方推薦的 2.7.2 版本,是需要到 docker 官方倉庫裏面去找:

  • https://hub.docker.com/r/library/jenkins/

可以讀一讀底下的 Full Description ,有一些怎麽使用 jenkins 鏡像的說明

開始使用

拉取鏡像
docker pull jenkins:2.7.2

通用的啟動方式,用 -p 參數指定暴露的端口,用 -v 參數掛載 jenkins_home
docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins:2.7.2

  • 8080 端口是訪問 jenkins 網頁的端口,如果你想在 80 端口訪問,就改成 -p 80:8080
  • 50000 端口與 slave 有關,參考 jnlp-slave 這個鏡像,裏面使用的 port。
  • -v 參數掛載了宿主機一個指定目錄到 /var/jenkins_home ,相當於設置了自定義的 JENKINS_HOME

jenkins 容器中添加 git, maven 等組件

一般我們使用jenkins的時候,需要用到 git, jdk, maven 等等的組件,在使用 docker-jenkins 的時候,可以用 -v 參數掛載到 /usr/bin 目錄中,並不需要再在鏡像中進行安裝,也不需要基於jenkins鏡像重新寫dockerfile,保持鏡像幹凈。

jenkins 容器中的公鑰私鑰

很常用的 jenkins 構建操作有:在 Execute shell 步驟中用 ssh 的方式遠程登錄上其他服務器,服務器上面的執行 shell 腳本。 ssh 方式需要用到的 public key 和 private key 也是可以用 -v 參數掛載到 /var/jenkins_home/.ssh

目錄中。註意,這裏不掛載到容器的 /root/.ssh 目錄,因為整個 jenkins 容器是以 jenkins 用戶來運行的。

在 jenkins 容器中調用 docker

有兩種方式來調用 docker :

  1. 通常用在 docker 單節點下,可以掛載 docker 到 jenkins 容器中,添加如下參數: -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker
  2. 通常用在 docker 集群中,可以使用 jenkins 的 docker 插件,連接到 Docker server REST API(http://master-ip:2375):
    • Docker plugin
    • Docker Commons Plugin
    • docker-build-step

簡單的方式啟動 Docker server REST API

在安裝容器管理工具 shipyard 的文檔中,發現可以用 shipyard/docker-proxy 這個鏡像來暴露 2375 端口, 得到一個 Docker server REST API

docker run \     -ti \     -d \     -p 2375:2375 \     --hostname=$HOSTNAME \     --restart=always \     --name shipyard-proxy \     -v /var/run/docker.sock:/var/run/docker.sock \     -e PORT=2375 \     shipyard/docker-proxy:latest 

將 http://master-ip:2375 填入 jenkins 系統設置中的 Docker URL 就可以了(master-ip 是 docker server 的 ip)。

技術分享圖片

一個 jenkins 示例

我啟動的 jenkins 裏面包含 git, docker, 一份宿主機的公鑰密鑰, 自定義 JENKINS_HOME, 使用的啟動命令如下:

docker run \     -d -p 8080:8080 -p 50000:50000 \     -v /home/docker/jenkins_home/:/var/jenkins_home \     -v /var/run/docker.sock:/var/run/docker.sock \     -v $(which docker):/usr/bin/docker \     -v $(which git):/usr/bin/git \     -v ~/.ssh:/var/jenkins_home/.ssh \     --name=jenkins jenkins:2.7.2 

在 jenkins 設置任務來測試掛載的 git, docker, 以及公鑰密鑰是否正常

技術分享圖片

  • git clone 用來測試 git 和 密鑰是否生效
  • docker run hello-world 用來測試在宿主機運行的 docker 容器

構建任務的 Console Output:

技術分享圖片

git 使用密鑰正常克隆了代碼,docker 正常啟動了容器

期待更多

以後再總結下 docker 方式的 jenkins slave,以及 jenkins 的 docker 插件,jenkins 的 Docker CI 流程等等。

Docker 以 docker 方式運行 jenkins