CIを体験しよう
これからやること
- ソースコードをGitLabにpushします
- GitLabCIがpushイベントを検知し、設定されているジョブを自動的に実行
- イメージのビルド
- アプリケーションのテスト
- テストをパスしたソースを含んだイメージを自動的にレジストリに登録
つまりプログラムソースをpushすると自動でテストが走り、実行環境まで整備してくれます。
Source: Git プッシュから Amazon ECS に自動デプロイする仕組みを構築する
さぁ、体験してみましょう。
ソースコードのcopy
filesフォルダからtestフォルダへファイルを一式コピーします。
$ cp -r ../files/. .
Jobの内容
Jobの内容が上記の仕様になっていることを確認してください。
$ vi .gitlab-ci.yml
variables:
DOCKER_DRIVER: overlay
stages:
- build
- test
- deploy
build: # イメージのビルド
image: docker:latest
stage: build
before_script:
- docker info
script:
- docker build -t $CI_REGISTRY_IMAGE/identidock:latest .
tags:
- build
test: # イメージのテスト
image: docker:latest
stage: test
script:
- docker run $CI_REGISTRY_IMAGE/identidock:latest python /app/tests.py
tags:
- test
deploy: # イメージの登録(動作環境へのデプロイなど)
image: docker:latest
stage: deploy
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $CI_REGISTRY_IMAGE/identidock:latest
tags:
- deploy
ソースコードのpush
$ git add .
$ git status
$ git commit -m "デプロイテスト"
$ git push -u origin master
Jobの確認
ソースコードのpushを検知したGitLabは、Jobを登録してgitlab-runnerにてそのJobを実行します。
http://gitlab.phper-na14.info/root/test/pipelines にてJobを確認してみましょう。
おや?テストJobで失敗しています。詳細を見てみましょう。
$ docker run $CI_REGISTRY_IMAGE/identidock:latest python /app/tests.py
.F
======================================================================
FAIL: test_html_escaping (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/app/tests.py", line 19, in test_html_escaping
assert '<b>' not in str(page.data)
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.006s
FAILED (failures=1)
ERROR: Job failed: exit code 1
サニタイズ処理のテストが失敗していました。
ソース修正
エラーの原因が分かったのでサニタイズ処理を追加しましょう。修正後再度pushします。
$ vi app/identidock.py
name = html.escape(request.form['name'], quote=True) # 18行目修正
name = html.escape(name, quote=True) # 38行目付近に追記
$ git add .
$ git status
$ git commit -m "HTMLエスケープ処理追加"
$ git push -u origin master
再度Jobの確認
http://gitlab.phper-na14.info/root/test/pipelines
暫く待つと...お!テストがパスされて最後までJobが動作しています。
イメージ登録確認
レジストリにイメージが登録されています!