--- tags: jenkins, docker --- # 使用 docker 建立 jenkins 執行環境與設定 agent ## 建立 jenkins ### 建立執行資料夾 jenkins ```shell= mkdir jenkins ``` ### 建立 docker-compose.yml ```dockerfile= version: '3.3' services: jenkins: image: jenkins/jenkins:lts restart: unless-stopped privileged: true user: root ports: - 8080:8080 container_name: jenkins volumes: - ~/jenkins:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/local/bin/docker:/usr/local/bin/docker ``` **特別要注意的是** 為了要能夠監控 docker 開啟的 agent 所以需要把 /var/run/docker.sock 與 /usr/local/bin/docker 給 mount 到 container 內 並且需要打開 privileged 權限來讓 container 得以使用特殊權限讀取 host 內其他資訊 ### 啟動 jenkin 做管理設定 ```shell= docker-compose up -d ``` 進入 http://localhost:8080 後 會需要輸入一個預設密碼 需要使用以下指令讀取該密碼並且輸入 ```shell= docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword ``` ### 初始設定 需要設定管理員帳密 ## 設定 agent ### 產生一組 ssh key 來做與 jenkin 溝通的認証 ```shell= ssh-keygen -t ed25519 -f jenkin_keys -C "jenkins" ``` 會產生一組 jenkin_keys.pub 與 jenkin_keys 的公鑰與私藥 ### 把密鑰加入 jenkins 管理 -> 全域 -> credential    ### 把 agent 設定加入 docker-compose.yml ```dockerfile= version: '3.3' services: jenkins: image: jenkins/jenkins:lts restart: unless-stopped privileged: true user: root ports: - 8080:8080 container_name: jenkins volumes: - ~/jenkins:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/local/bin/docker:/usr/local/bin/docker agent: image: jenkins/ssh-agent:jdk11 privileged: true user: root container_name: agent expose: - 22 environment: - JENKINS_AGENT_SSH_PUBKEY=${JENKINS_AGENT_SSH_PUBKEY} ``` **特別注意的是** 因為 agent 是透過 ssh 與 jenkin 做溝通,所以對外 agent 只開啟 22 port 並且一樣因為需要能夠讓 agent 可以做一些寫入 log 動作所以會需要有 root 且有 priviledged 權限, 另外需要把剛剛的 jenkin_keys.pub 填入 JENKINS_AGENT_SSH_PUBKEY ### 啟動 agent ```shell= docker-compose up -d ``` ### 新增 agent 到 Jenkins     ### 察看執行 agent 的 log  ## 檢查所有 node 狀態 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up