天天看點

使用GitLab自動建立 Docker img

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

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

1、安裝 Docker

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

2、安裝 GitLab CI Runner

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

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

<code>sudo</code> <code>apt-get </code><code>install</code> <code>gitlab-ci-multi-runner</code>

3、然後注冊 runner:

<code>sudo</code> <code>gitlab-ci-multi-runner register</code>

注冊好後, 我們可以看 runner 的配置檔案, 類似如下:

<code># /etc/gitlab-runner/config.toml</code>

<code>concurrent = 1</code>

<code> </code> 

<code>`runners`</code>

<code>  </code><code>url = </code><code>"http://gitlab.com/ci"</code>

<code>  </code><code>token = </code><code>"******************"</code>

<code>  </code><code>name = </code><code>"image builder"</code>

<code>  </code><code>executor = </code><code>"shell"</code>

<code>  </code><code>[runners.</code><code>ssh</code><code>]</code>

<code>  </code><code>[runners.docker]</code>

<code>    </code><code>image = </code><code>""</code>

<code>    </code><code>privileged = </code><code>false</code>

<code>  </code><code>[runners.parallels]</code>

<code>    </code><code>base_name = </code><code>""</code>

<code>sudo</code> <code>usermod</code> <code>-aG docker gitlab-runner</code>

4、配置使用:

<code>tages:</code>

<code>  </code><code>- build_image</code>

<code>  </code><code>- push_image</code>

<code>before_script:</code>

<code>  </code><code>- docker info</code>

<code>build_image:</code>

<code>  </code><code>stage: build_image</code>

<code>  </code><code>script:</code>

<code>    </code><code>- docker build -t myregistry</code><code>/aplusplus/ubuntu</code><code>:16.04 .</code>

<code>push_image:</code>

<code>  </code><code>stage: push_image</code>

<code>    </code><code>- docker push myregistry</code><code>/aplusplus/ubuntu</code><code>:16.04</code>

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

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

本文轉自 喵來個魚 51CTO部落格,原文連結:http://blog.51cto.com/m51cto/1959183,如需轉載請自行聯系原作者