Docker
CentOS
如果是一般直接安裝在 Host 上的 Jenkins,像是直接利用 Windows msi、MacOS 的 brew 或是Linux的yum/apt-get之類的,那麼只要在該OS上有安裝docker,就可以在Jenkins 的 Build step 裡可以利用 Windows Batch 或是 Linux shell 的方式執行docker指令。
然而若 Jenkins 本身也是一個 Docker Container,在存取 host 的 Docker engine 就有一些先天上的限制。此篇主要是針對這種情境來設定,讓跑在container上的Jenkins也可以執行docker指令。
作業的環境大致如下:
OS : CentOS 7 64-bit
RAM: 4G
CPU: 2-Core
HDD: 32GB
docker run -d --name test-jenkins --user root -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins
docker exec -it --user root test-jenkins /bin/bash
再此請特別留意這邊要 user root 才有權限可以安裝
apt-get update && apt-get -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common && curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" && apt-get update && apt-get -y install docker-ce
以上就是在Jenkins container裡執行docker指令的方法,
另外也可以透過 Jenkins Pipeline 來達到類似的效果,不過因為筆者習慣用 Job,所以就不多加著墨了。