サイトアイコン

toLog

ActionsをJobで並列化したい

  • 更新日:
  • 投稿日:
サムネイル

この記事は最終更新日から2年以上が経過しています。

はじめに

個人ブログのリプレイスに伴い、ちゃんと CI を用意して開発したいと考え Github Actions を書いたのですが、どうせなら効率良くしたいと思い、その時の備忘録を残しておきます。 大したことはしていません、下記観点を考慮して並列化した程度です 💦

何をしたいのか?

  1. なるべく並列化して CI を速くまわしたい
    • how: Job 単位で処理を実行する
      • Step は直列実行ですが Job は並列実行なので、処理を Job 単位で上手く切り分けることで、並列に処理を完了させることができます
  2. テスト結果を Slack に通知できるようにしたい
    • how: Slack 通知用の action-slack ワークフローがあるのでこれを使います

前提条件

  • Ubuntu 20.04
  • Node.js 14.15.0

サンプル

1name: CI
2
3on:
4  pull_request:
5    paths-ignore:
6      - *.md # markdownは避けたい
7
8jobs:
9  lint:
10    runs-on: ubuntu-20.04
11    strategy:
12      matrix:
13        node-version: [14.15.0]
14    steps:
15      - uses: actions/checkout@v2
16      - uses: actions/setup-node@v2
17        with:
18          node-version: ${{ matrix.node-version }}
19          cache: "yarn"
20      - run: yarn
21      - run: yarn bootstrap
22      - run: yarn lint
23
24  test:
25    runs-on: ubuntu-20.04
26    strategy:
27      matrix:
28        node-version: [14.15.0]
29    steps:
30      - uses: actions/checkout@v2
31      - uses: actions/setup-node@v2
32        with:
33          node-version: ${{ matrix.node-version }}
34          cache: yarn
35      - run: yarn
36      - run: yarn bootstrap
37
38      - name: test
39        working-directory: packages/backend # テストがある階層に移動
40        run: yarn test
41
42      # テストの成否をSlackに通知 by https://github.com/8398a7/action-slack
43      - name: notification
44        uses: 8398a7/action-slack@v3
45        env:
46          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
47        if: always()
48        with:
49          status: custom
50          custom_payload: |
51            {
52              attachments: [{
53                fields: 'job',
54                author_name: 'Test for CMS',
55                mention: 'here',
56                if_mention: 'failure',
57                color: '${{ job.status }}' === 'success' ? 'good' : 'danger',
58                text: '${{ job.status }}' === 'success' ? 'Test success' : 'Test failed',
59              }]
60            }

おわりに

今まで Github Actions では、直列実行の Step でやりくりしていたのですが、Job で並列化することで高速化を試みました。比較はしていませんが、速くなったような...気がしています。 この程度の Step 数ではそこまでメリットはなさそうですが、処理が増えると並列化が効いてくるのかなと信じています。


プロフィール画像

canji

とにかく私的にサービスを作りたい発作を起こしている。お腹はペコペコ。

  • toLog Tools icon
  • dots icon