Docker 以 docker 方式運行 jenkins
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_homedocker 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 :
- 通常用在 docker 單節點下,可以掛載 docker 到 jenkins 容器中,添加如下參數:
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker
- 通常用在 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