--- 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.