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,如需轉載請自行聯系原作者