GitLab CI/CDを使ったPythonアプリケーションのテストとデプロイ

この例では、Pythonアプリケーションでテストを実行し、Herokuアプリケーションとして自動的にデプロイする方法を説明します。

また、サンプルの完全なソースを表示したり、フォークすることもできます。

プロジェクトの設定

このプロジェクトの.gitlab-ci.yml ファイルはこんな感じです:

stages:
  - test
  - deploy

test:
  stage: test
  script:
    # this configures Django application to use attached postgres database that is run on `postgres` host
    - export DATABASE_URL=postgres://postgres:@postgres:5432/python-test-app
    - apt-get update -qy
    - apt-get install -y python-dev python-pip
    - pip install -r requirements.txt
    - python manage.py test

staging:
  stage: deploy
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=gitlab-ci-python-test-staging --api-key=$HEROKU_STAGING_API_KEY
  only:
    - master

production:
  stage: deploy
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=gitlab-ci-python-test-prod --api-key=$HEROKU_PRODUCTION_API_KEY
  only:
    - tags

このプロジェクトには3つのジョブがあります:

  • test - Django アプリケーションのテストに使用します。
  • staging - master ブランチにプッシュするたびにステージング環境を自動的にデプロイするために使われます。
  • production - タグが作成されるたびに本番環境を自動的にデプロイするために使用されます。

APIキーの保存

GitLabプロジェクトのSettings > CI/CD >Environment variablesで2つの変数を作成する必要があります:

  • HEROKU_STAGING_API_KEY - ステージングアプリのデプロイに使用するHeroku APIキー。
  • HEROKU_PRODUCTION_API_KEY - 本番アプリのデプロイに使用するHeroku APIキー。

アカウントの管理でHeroku APIキーを見つけてください。

Herokuアプリケーションの作成

環境ごとに、新しいHerokuアプリケーションを作成する必要があります。 これはダッシュボードから行うことができます。

ランナー作成

まずDocker Engineをインストールします。

このプロジェクトをビルドするには、GitLab Runnerも必要です。gitlab.com で公開されているランナーを使うこともできますし、自分で登録することもできます:

cat > /tmp/test-config.template.toml << EOF
[[runners]]
[runners.docker]
[[runners.docker.services]]
name = "postgres:latest"
EOF

gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "PROJECT_REGISTRATION_TOKEN" \
  --description "python-3.5" \
  --executor "docker" \
  --template-config /tmp/test-config.template.toml \
  --docker-image python:3.5

上記のコマンドで、python:3.5 イメージを使用し、PostgreSQLデータベースを使用するランナーを作成します。

PostgreSQL データベースにアクセスするには、host: postgres にユーザーpostgres としてパスワードなしで接続します。