選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
2 分鐘閱讀時間 (327 個字)

Jenkins 容器中執行 docker 指令

1t5fqqkzm9lZc4V-hMxh79g

tags: Docker CentOS

在 Jenkins 容器中執行 docker 指令

一、前言

如果是一般直接安裝在 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

三、安裝 & 測試

  1. 首先要先起一個 Jenkins 的 Docker container,指令如下:
    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
  2. 承上,各位應有注意到這裡的 mount 是指向 host 的 docker.sock,透過這個設定才能在Jenkins container內使用 docker daemon 的資訊,此外還有就是透過 exec 在 Jenkins 執行 bash 的權限要給予 root,否則之後無法在 Jenkins 的 container 上安裝 docker-client。
  3. 再來進到Jenkins container的bash
    docker exec -it --user root test-jenkins /bin/bash

     再此請特別留意這邊要 user root 才有權限可以安裝

  4. 再來就是安裝 docker client
    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
  5. 建一個專案
  6. 增加一個build step
  7. 執行看看結果

四、結論

以上就是在Jenkins container裡執行docker指令的方法,
另外也可以透過 Jenkins Pipeline 來達到類似的效果,不過因為筆者習慣用 Job,所以就不多加著墨了。

從原始碼到容器化
Dockeried Service 部署指南

相關文章