delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

自作アプリ(Django製)にGitHub ActionsによるCIを導入してみた

概要

GitHub Actionsを覚えたかったので、以前にDjangoの勉強用に作った自作アプリに導入してみることにした。

github.com

割とスムーズにできた。

やったこと

結論

.github/workflow配下に以下のようにYAMLを配置する。

name: CVE Rooster CI
on: push

jobs:
    unittest:
        name: Check Code Format And Unit Test
        runs-on: ubuntu-latest
        steps:
            - name: Checkout
              uses: actions/checkout@v2
            - name: Set Up Python3
              uses: actions/setup-python@v2
              with:
                python-version: '3.7'
                architecture: x64
            - name: Install Python Packages
              run: pip3 install -r requirements.txt
            - name: Start Docker Compose
              run: docker-compose up -d
            - name: Check Code Format
              run: tox -e flake8
            - name: Unit Test
              run: tox -e testapp

Djangoユニットテストはtoxの中で実行している。

説明

いくつかポイントだと思った箇所を説明する。

サーバー上にGitリポジトリをcloneする

以下の2行が該当する。
※ 「name」はやることに名前をつけているだけなので、何でもよいし、なくてもよい。

- name: Checkout
  uses: actions/checkout@v2

前提として、Github Actionsでは、Github Actionsが実行されるサーバー上にGitリポジトリをcloneしたり、プログラミング言語をインストールする場合には以下の公式が提供しているリポジトリを使うことができる。

github.com

サーバー上にGitリポジトリをcloneする場合は、actions/checkoutというリポジトリを使用する。

この行では、

ということをやってくれている。

@の後ろの部分に関しては、バージョンを必ず指定しなければならない。
現在の最新版は2系なので、バージョン2を指定している。

※ プロダクションコードで運用する場合は、マイナーバージョンまで固定した方が良いのだろうが、今回は対象が自作のおもちゃアプリなのでメジャーバージョンのみ指定している。

Pythonをセットアップする

以下の部分がPythonをセットアップしている部分である。

- name: Set Up Python3
  uses: actions/setup-python@v2
  with:
    python-version: '3.7'
    architecture: x64

こちらも、公式がPythonセットアップ用のリポジトリを提供してくれているので、それを使用する。

github.com

使い方は公式ドキュメントに記載されている。

setup-python@v2は「setup-python」のバージョンであって、Pythonのバージョンが2系という意味ではない。

Docker Composeを起動する。

Docker Composeはサーバー上にコマンドが既にインストールされているので、以下のように、実行したいコマンドを書くだけでよい。

- name: Start Docker Compose
  run: docker-compose up -d

ポイントは以上

CIがpassするまでPRをマージできないようにする

CIを導入したので、CIがpassするまではGitHub上でPRをマージするボタンを押せないようにしたい。
※ マージ先がmain(master)ブランチの前提

これは、GitHubの画面上で設定することができる。

①以下の通り遷移する。
Settings > Branches > Add rule

②以下のように入力してruleを作成する。
f:id:kamatimaru:20210206230612p:plain

これだけでOK。

参考にさせていただいた本

以下の本がとても分かりやすかった。

booth.pm