GitHub * TravisCI * Docker Repository(DockerHub, ECR)の連携


GitHub * TravisCI * Docker Repository の連携

TravisCI を使うことになりちょっと勉強しました。
CircleCIやGitLab CIとそんなに変わらないdockerが使えるCIです。

ソースは github にあげました。

ファイル

Djangoの雛形作成

一応、Djangoの雛形作成した手順です。
pyenv, Pipenvはセットアップ済です。

$ pipenv --python 3.6
$ pipenv install django==2.2.3
$ pipenv shell
(travis_ci) $ django-admin startproject travis_ci
(travis_ci) $ cd travis_ci
(travis_ci) $ python manage.py migrate

.travis.yml

GitHubでタグを打ったら、Docker Hub, ECRにDjango雛形が入ったdockerイメージをプッシュします。

.travis.yml
language: python

services:
  - docker

env:
  global:
    - APP_NAME=sample_travis_ci
    # awscli
    - PATH=$HOME/.local/bin:$PATH
    # Docker Hub
    - DOCKER_HUB_ACCOUNT=va034600
    # ECR
    - AWS_DEFAULT_REGION=ap-northeast-1

before_install:
  # ECR
  - pip install -U pip
  - pip install awscli

script:
  - echo "script"

after_success:
  - docker --version
  - docker build -t $APP_NAME:latest -f docker/Dockerfile .
  - docker images

  # Docker Hub
  - echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_ACCOUNT" --password-stdin
  # Docker Hub public
  - docker tag $APP_NAME:latest $DOCKER_HUB_ACCOUNT/${APP_NAME}_pub:${TRAVIS_TAG}
  - docker push $DOCKER_HUB_ACCOUNT/${APP_NAME}_pub:${TRAVIS_TAG}
  # Docker Hub private
  - docker tag $APP_NAME:latest $DOCKER_HUB_ACCOUNT/$APP_NAME:${TRAVIS_TAG}
  - docker push $DOCKER_HUB_ACCOUNT/$APP_NAME:${TRAVIS_TAG}

  # ECR
  - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
  - docker tag $APP_NAME:latest $AWS_ECR_ACCOUNT.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$APP_NAME:${TRAVIS_TAG}
  - docker push $AWS_ECR_ACCOUNT.dkr.ecr.ap-northeast-1.amazonaws.com/$APP_NAME:${TRAVIS_TAG}

branches:
  only:
  - "/^v?[0-9\\.]+/"

Dockerfile

FROM python:3.6.10

WORKDIR /usr/src/app

RUN pip install --upgrade pip && pip install pipenv

COPY ./Pipfile /usr/src/app/Pipfile
COPY ./Pipfile.lock /usr/src/app/Pipfile.lock

RUN pipenv install --system

COPY . /usr/src/app/

CMD tail -f /dev/null

各種サービスの設定

TravisCI

TravisCI の Environment Variablesの設定です。

Docker Repository(DockerHub)

DockerHubにrepositoryを作成しました。

Docker Repository(ECR)

ECR -> リポジトリ -> リポジトリ でrepositoryを作成しました。

起動

最後にDocker Hubに登録したdockerイメージをpullして起動確認しました。

docker-compose.yml

docker-compose.yml
version: '3'
services:
  api:
    image: va034600/sample_travis_ci_pub:v2.0.10
    working_dir: /usr/src/app/travis_ci
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
$ docker-compose up

ブラウザで確認できたら終了です。