GitHub Actionsを利用したトイルの削減について
株式会社スマートバンク / maaaato
EM / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
利用プラン | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|
GitHub Team | 10名以下 | 2020年10月 | B to C |
利用プラン | GitHub Team |
---|---|
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2020年10月 |
事業形態 | B to C |
アーキテクチャ
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
スマートバンクはPCI DSSに準拠するため定期的に対応が必要なPCI DSSの要件をGitHubのIssueで管理し対応しています。
例えば90日毎にパスワードの変更を実施する(要件8 システムコンボーネントへのアクセスを識別・認証する)といった要件があります。
PCI DSSの更新時には対応したエビデンスを提出する必要があり、スマートバンクではGitHubに対応する要件のIssuesを作成しエビデンスとしています。
定期的にGitHubにIssuesを作成する必要があるのですが、これまで温かみのある手作業で作成していました。手動である必要はなく、「頻度も低いのでパッと作っちゃうか」という理由です。とはいっても対応する要件の件数が1つ2つではないのでめんどうな作業でした。まさにThis is Toilです。
PCI DSSの対応が発生するタイミングは以下の通りです。
- 90日毎(四半期)
- パスワードの変更や不要なアカウントが存在していないか確認
- 半年毎
- PCI DSSの適応範囲のセグメントから別セグメント(逆のパターンも)へのネットワークレベルでの接続確認
- 一年毎
- インシデントが発生した場合における訓練の実施
全体の作業の一部のみを記載しており本来は他にもあります。 どれも次に対応するまでの期間が長くその都度手動でIssuesを作成していましたが、一年毎の対応ですと20個近いIssuesの作成が必要となります。
どのような状態を目指していたか
課題を整理すると以下の要件を満たすと解決できることがわかりました。
- 各要件のIssueはテンプレート化できる内容である
- 定期的=スケジュールが読めるのでそのタイミングでIssueがあればよい
この要件を満たすためにGitHub Actionsの機能を利用することにしました。
選定理由
GitHub Actionsでは便利なActionsを利用することができます。 Issueのテンプレート内に別のIssueを埋め込みたかったことと定期実行のためにスケジュールによるActionsの実行ができるところが決め手でした。
また、利用しているActionsは以下の2つです。
導入の成果
改善したかった課題はどれくらい解決されたか
課題解消に必要だった要件は以下の2点でしたが、すべて解決できています。
- 各要件のIssueはテンプレート化できる内容である
- 定期的=スケジュールが読めるのでそのタイミングでIssueがあればよい
1については各要件のテンプレートを用意し、それをまとめるための親のIssueを作成し、子のIssueを結びつけています。
これによりIssueを管理する煩雑さが解消されています。
2についてはスケジュールの機能を利用し、必要となる月の始めに実行するよう設定することで解消されています。
また、IssueのアサインについてもIssueのテンプレートに組み込むことでアサインが漏れることを防いでいます。
どのような成果が得られたか
これまで手動で作成していたIssueが作業の必要なタイミングで自動的に作成されることでIssue作成にかかっていた手間と時間がまるっと削減することができました。 PCI DSSの対応がきっかけでしたが他にも月に一回発生する作業のIssue作成もこの仕組みを利用することでIssue管理の煩雑さを解決できています。
導入時の苦労・悩み
今回やりたかったことは定期的にIssuesを自動作成することですが、親のIssuesに子のIssuesを紐づけたいと考えていました。
元々のIssuesの構成は四半期に対応する作業を子のIssuesとして作成し、それらを束ねる親のIssuesを作成し紐づけていました。この構成は親のIssuesを見れば残っているIssuesの確認が容易だったため踏襲したいと思っていました。
結論から言うと親のIssuesに子のIssuesのNumberを埋め込むにはCreate an issueとissue Bot Actionを組み合わせる必要がありました。
Create an issueは作成したIssuesのNumberをstep.xxxx.output.numberで参照が可能ですが、Issue Bot Actionで作成した場合は参照が出来ませんでした。
Create an issueで作成するIssuesはIssueのtemplateの利用できますが、template内に外部から渡した変数を参照することが出来ません。しかし、Issue Bot Actionではbodyをyaml上に定義する事が出来るため、step.xxxx.output.numberを参照させて親のIssuesに子のIssuesのNumberを埋め込むようにしています。
- 設定内容の例
name: 四半期毎のPCIDSS更新作業
on:
schedule:
# UTCで記載
- cron: 00 01 01 04,10 *
workflow_dispatch:
inputs:
override:
description: 'If you want to create issues, enter "true"'
required: false
default: ""
jobs:
create_issue:
name: 四半期毎のPCI DSS更新作業
runs-on: ubuntu-latest
steps:
# Repo code checkout required if `template` is used
- uses: actions/checkout@v3
- name: Generate GitHub Apps token
id: generate
uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.CREATE_ISSUES_BOT_APP_ID }}
private_key: ${{ secrets.CREATE_ISSUES_BOT_PRIVATE_KEY }}
- uses: JasonEtco/create-an-issue@v2
id: password-change
with:
filename: .github/ISSUE_TEMPLATE/request-issue-password-change.md
env:
GITHUB_TOKEN: ${{ steps.generate.outputs.token }}
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y/%m')"
- uses: imjohnbo/issue-bot@3d96848fb5e9a4a473bb81ae62b4b4866a56e93a
with:
assignees: "maaaato"
labels: "pcidss"
title: "${{ steps.date.outputs.date }} 四半期毎のPCI DSS更新作業"
body: |
# 四半期ごと
- パスワードの変更 8.2.4
- #${{ steps.password-change.outputs.number }}
env:
GITHUB_TOKEN: ${{ steps.generate.outputs.token }}
導入に向けた社内への説明
上長・チームへの説明
必要なサービスだったため特にしていません
活用方法
よく使う機能
- GitHub Actionsのschedule
- Issueの作成にActionsを利用
- https://github.com/marketplace/actions/create-an-issue
- https://github.com/marketplace/actions/issue-bot-action
ツールの良い点
GitHubを利用されている方であれば導入は簡単で身近なツールだと思います。
ツールの課題点
GitHubを利用されていない方だとこのツールをだけを利用することは難しいかと思います。
今後の展望
2つのGitHub Actionsを組み合わせていますがどちらか1つのActionsで済ませるようにしたいと考えています。
株式会社スマートバンク / maaaato
EM / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
よく見られているレビュー
株式会社スマートバンク / maaaato
EM / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名