今回はPythonのプロジェクトのリポジトリを Github Actions
で pytest
を docker-compose
のイメージ上で行う為の練習を行ったのでそのメモを記載します。
前提条件
- Github の packages のトークンを作成しておく。
- docker login しておく。
- Github の 任意のリポジトリに
Secrets
をpackages操作可能なトークン番号を登録しておく。
(私の環境ではGHCR_IO_TOKEN
という名前で登録している。)
フォルダ構成
repository/ # リポジトリディレクトリ
├ .github/
│ ├ workflows/
│ │ └ sample.yml # Github actionsのファイル
├ project/
│ ├ sample/ #(説明省略)
│ │ ├ __init__.py
│ │ └ add.py
│ └ test/ #(説明省略)
│ ├ __init__.py
│ └ test_add.py
├ docker-compose.yml # 後ほど詳細記載
├ Dockerfile # 適当なPythonイメージ(説明省略)
└ requirements.txt # 適当なパッケージを記載(今回はpytestのみ記載している)
手順
- docker-compose.ymlにimageを
ghcr.io
指定したイメージ名を記載する。 -
docker-compose up
でイメージを作成後、docker-compose push
してイメージをPushする - github actionsのファイルで pull して pytestを行う!
イメージをghcr.ioに上げる。
以下のようにイメージを指定する。
docker-compose.yml
services:
python:
build: .
#image: ghcr.io/Githubのユーザー名/リポジトリ名/イメージ名:タグ名
image: ghcr.io/n-jun-k2/sample-actions/python:v1
ローカルでイメージを作成し、Pushする。
# とりあえずいつもの様にイメージを作成
docker-compose up -d
# イメージをPush
docker-compose push
Github Actions のCIファイルについて
...
は適当に変えてください。
チェックアウトしてログインしてpullしてpytestを行っています。
.github/workflows/sample.yml
name: ...
on:
...
jobs:
...:
name: ...
runs-on: ubuntu-20.04
steps:
- name: Checkout # チェックアウトして
uses: actions/checkout@v2
- name: Login to Docker # docker login して
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_IO_TOKEN }}
- name: Set up Docker # pull してイメージを立ち上げ
run: |
docker pull ghcr.io/n-jun-k2/sample-actions/python:v1
docker-compose up -d
- name: Run test # pytestを行う。
run: docker-compose exec -T python pytest
このCIファイルでdocker-composeイメージ上でpytestが行われる。
注意すべき点は、以下の-T
のオプションを入れ忘れないように!エラーになっちゃうよ
docker-compose exec -T python pytest