Github ActionsでCI testを回す
Github ActionsでCI testを回す
このブログでやること
- github actionsでCI testを回す - docker の nodeコンテナを使う - CI testを行う
今回はすでに動いているリポジトリにci testを追加します。
nodeのバージョンを揃えるため、dockerコンテナを利用する方法を採用しました。
別の言語やruntimeを使っている人は適宜読み替えてください。
github actions がきた!
github actions きましたね。 github上で起こるアクション(push, prなど)に応じて特定のタスクを実行することができるタスクランナですね
リポジトリの 「actions」からいけます。 めちゃくちゃ設定が簡単で、30分ほどで設定できました。
GitHub Actionsについて - GitHub ヘルプ
詳しくはこちら
こちらの記事がusageについて詳しいです。
workflowが登録できる
「new workflow」をクリック
ここで「set up a workflow」 します。
yamlファイルでworkflowを定義します。
yamlの項目はこちらに詳細に書いてあります。
GitHub Actionsのワークフロー構文 - GitHub ヘルプ
初期状態はこちら。
name: CI on: [push] # pushで実行 jobs: # ジョブ一覧 build: # ジョブ runs-on: ubuntu-latest # ジョブを動かす環境を選ぶ(複数指定可能) steps: - uses: actions/checkout@v1 # github のリソースにアクセスするアクション - name: Run a one-line script # workflow name run: echo Hello, world! # CLIで実行されるshell command - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
nodeでtestを回す準備
この節は適宜読み飛ばしたり、読みかえてください。
CIの前に依存パッケージインストール, ビルド, テストの準備を行います。
ここに関しては元々用意してあったため使いまわしました。
僕は開発にMakefileを利用しています。
プログラムのビルド作業を自動化するツールですね。
よく使うコマンドをMakefileに記述することで開発速度を早めることができるためです。
特にCIなど予め定められた特定の処理を行う場合には非常に優秀なツールです。
今回はnpmで依存パッケージのインストールと、gulpによるビルド、テスティングライブラリavaによるtestを行います。
Makefile
.PHONY: install gulp npm=$(shell which npm) npx=$(shell which npx) install: $(npm) install # package.jsonの依存lib install gulp: $(npx) gulp # gulpでビルド test: $(npm) test # package.jsonのtestを叩きます
package.json
(一部抜粋)
{ ..., "devDependencies": { ... , "ava": "^1.3.1", "gulp": "^4.0.0", "gulp-cli": "^2.0.1", ... , }, "ava": { "compileEnhancements": false, "extensions": [ "ts" ], "require": [ "ts-node/register" ] }, "scripts": { "test": "tsc && ava" }, ... }
Github ActionsでCI testを回す
さて、準備が整いました。yamlを書いていきます。
今回は docker の nodeコンテナを利用します。
setup-node
が利用可能です。
name: CI on: [push, pull_request] # prが出た時, pushした時にciをトリガする jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 # これがnode コンテナ with: node-version: '10.x' # withでバージョン指定 - run: make install # makefileで指定したタスクをrun! - run: make gulp - run: make test
job
はデフォルトで並列実行されます。
このため、 このjobでは install -> build -> test
を1つの jobで行っています。
個々の役割を job
に切り分けることも可能です。
その場合は jobs.<job_id>.needs
で依存jobを指定できます。
一度試してみましたが、needsを書くだけではうまく動きませんでした。 jobごとにインスタンスが生成されるのでその辺を解消しないといけません。
今回はそこまでやらなくてもいいのでここまで。