LoginSignup
1
0

More than 3 years have passed since last update.

Gitlab CIにて、コミット情報をデプロイしたコンテナに渡す

Last updated at Posted at 2019-04-01

やりたいこと

gitlabにて、commitしたコードを使ってコンテナ(Webアプリケーション)をデプロイするCIを運用中。
本番とステージングの2種類を用意しているため、各々の画面を見たときに、これはどのコミットなのかすぐに判別したい(本番とステージングで差があるかどうか)。

解決策

GitLab10.8以上という条件付きではあるが、Gitlabであらかじめ用意されている環境変数を使用すればよい。
GitLab CI/CD Variables
この中の、CI_COMMIT_TITLEを使用する。

まず、表示させたいページのHTMLに、以下のような内容を追記する。

toppage.html
<p class="text-muted" align="right">Commit Version: CI_COMMIT_TITLE</p>

このCI_COMMIT_TITLEをCIのジョブで書き換える。
以下では確認のために、exportとechoで変数の内容を確認するステップを入れている。

.gitlab-ci.yml
before_script:
   - docker info
   - export
   - echo ${CI_COMMIT_TITLE}
   - sed -i -e "s/CI_COMMIT_TITLE/${CI_COMMIT_TITLE}/g" templates/toppage.html

build:
  script:
    - docker build -t citest .
#(略)

これでtoppage.htmlを表示させれば、コミットメッセージの最初の1行が表示される。

Shell Executerの場合(2020/1/7 Update)

上記の方法はshell executerでCIを行っているときには有効ではなかった。その場合は次のように、
まず--build-argオプションを使って、DockerfileにCI_COMMIT_TITLEを渡す。

.gitlab-ci.yml
build:
  script:
    - docker build -t citest . --build-arg commit_title="$CI_COMMIT_TITLE"
#(略)

そしてDockerfile内でその変数を使用してHTMLを書き換える。

Dockerfile
ARG commit_title
RUN sed -i -e "s%CI_COMMIT_TITLE%${commit_title}%g" deploy-automation/templates/datadomain/home.html

ここでsedのセパレータとして%を使用しているのは、コミットタイトルにデフォルトのセパレータである/(スラッシュ)が入っていることが多いため。

補足

ちなみに"$CI_COMMIT_TITLE"をダブルクォータで囲まないと、CI_COMMIT_TITLEに空白がある場合に以下のようなエラーで失敗する。

$ sudo docker build citest --build-arg commit_title=$CI_COMMIT_TITLE .
"docker build" requires exactly 1 argument.
See 'docker build --help'.

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile
ERROR: Job failed: exit status 1
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0