CIを体験しよう


これからやること

  1. ソースコードをGitLabにpushします
  2. GitLabCIがpushイベントを検知し、設定されているジョブを自動的に実行
    1. イメージのビルド
    2. アプリケーションのテスト
    3. テストをパスしたソースを含んだイメージを自動的にレジストリに登録

つまりプログラムソースを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が動作しています。

イメージ登録確認

レジストリにイメージが登録されています!

results matching ""

    No results matching ""