1. 程式人生 > >使用GitLab自動創建 Docker img

使用GitLab自動創建 Docker img

dock gitlab

GitLab 來管理 Dockerfile 是一件高效率的事情. 在每次更改 Dockerfile 之後, 都要手動 build 然後 push 到 registry, 有點重復性. 自己開了個 registry. 那就采用一種自動的方法來幫助我們做這種機械重復的工作.

使用了 GitLab CI, 並且自 GitLab 8.x 開始已經集成了 GitLab CI Server. 所以也不用額外部署 CI Server 了. 我們要做的工作就是部署一下 GitLab CI runner. 然後在 Dockerfile 的項目裏配置一下 .gitlab-ci.yml告訴 GitLab CI runner 如何做就行了.

1、安裝 Docker

在你想用來 build image 的機器上, 顯然需要先裝好 Docker. 參見 Docker官方文檔.

2、安裝 GitLab CI Runner

在用來 build 的機器上我們需要安裝 GitLab CI Runner. 官方項目裏面提供了很多安裝說明. 可以直接找你對應的需要. 這裏我就說一下我怎麽直接在 Ubuntu 16.04 上安裝的.(對應的官方文檔)

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner

3、然後註冊 runner:

sudo gitlab-ci-multi-runner register

當中會讓你填寫一些信息. 例如你的 gitlab-ci coordinator 的地址和註冊這個 runner 的 token, 這兩個在你 GitLab 中可以找到. 具體的內容我忘記截圖了. 關於 executor 的話, 我這裏使用的是 shell, 因為我將 runner 直接運行在物理機的系統上, 想其能夠直接使用 docker.

註冊好後, 我們可以看 runner 的配置文件, 類似如下:

# /etc/gitlab-runner/config.toml
concurrent = 1
 
[[runners]]
  url = "http://gitlab.com/ci"
  token = "******************"
  name = "image builder"
  executor = "shell"
  [runners.ssh]
  [runners.docker]
    image = ""
    privileged = false
  [runners.parallels]
    base_name = ""

關於這些參數可以在官方文檔中找到. 註冊好的 runner 在 GitLab 中如下圖所示.

實際顯示情況可能和上圖有不同, 因為我已經將這個 runner 設置為 specific runner 了. 關於 runner 的說明可以參考 官方文檔 configuring runner.

使用 GitLab runner 來 build docker image 的相關說明, 可以參考 官方文檔 using docker build. 主要需要註意的是, 為了要讓 runner 可以調用 docker 命令, 需要把 gitlab-runner 這個用戶加入 docker 所在組.

sudo usermod -aG docker gitlab-runner

4、配置使用:

可以參考官方文檔 Configuring project. 用的配置

tages:
  - build_image
  - push_image
 
before_script:
  - docker info
 
build_image:
  stage: build_image
  script:
    - docker build -t myregistry/aplusplus/ubuntu:16.04 .
 
push_image:
  stage: push_image
  script:
    - docker push myregistry/aplusplus/ubuntu:16.04

stages 定義了你要做幾步(stage) 以及他們之間的順序. 默認每個 stage 都是在之前所有 stage 成功執行後才會執行. 每個 stage 可以包含多個任務(job), 例如上面的 build_image 和 push_image. 這裏只定義了一個. 當每個 stage 有多個 jobs 時, 每個 jobs 會並行執行.

當你每次修改項目並 push 到 gitlab 後, runner 就會開始執行你配置的任務了


本文出自 “實踐出真知” 博客,請務必保留此出處http://m51cto.blog.51cto.com/53087/1959183

使用GitLab自動創建 Docker img