業務で実際に使っているActionsを利用例込で挙げてみた
Composite Run Stepsに合わせて全体で利用しているActionの見直しと整理を行っていました。元々最低限使うもののみという状態で、見直しても1部除いて特に増えることもなく。
業務で実際に使っているものを利用例合わせて挙げてみるのも需要は多少あるかなと思い、まとめてみました。
必需
Actionsを使う以上は利用が避けられないと思われるシリーズ。
actions/checkout
ソースコードのチェックアウトをしてくれます。ssh設定を引数として受け付けてくれるため、run
で git checkout
をするよりも手間が省けます。
- uses: actions/checkout@v2 with: repository: my-org/my-tools path: my-tools
actions/setup-python
Pythonのセットアップをしてくれます。バージョンやアーキテクチャの指定を受け付けることや、バージョンを範囲で指定するとその中で最新有効なバージョンを自動設定してくれるなど、自前でインストールするよりも便利です。
- uses: actions/setup-python@v2 with: python-version: '3.9.0-alpha - 3.9.0' # SemVer's version range syntax
普通はバージョン決め打ちになるでしょうが、使い方によっては公式リポジトリに乗っているように以下のようなことも可能です。
jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: - 'pypy-3.6' # the latest available version of PyPy that supports Python 3.6 - 'pypy-3.7' # the latest available version of PyPy that supports Python 3.7 - 'pypy-3.7-v7.3.3' # Python 3.7 and PyPy 7.3.3 steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }}
actions/setup-java
setup-python のjava版といった感じ。ポイントはdistributionが選択可能なところ。MarketplaceのURLがsetup-java-jdkなのもポイントです。
- uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '11' check-latest: true
actions/setup-node
nodejs版。MarketplaceのURLはsetup-node-js-environmentです。
- uses: actions/setup-node@v2 with: node-version: '14'
actions/cache
Actionsの実行時間短縮には助かりもの。keyの指定が理解するまで間違いやすいことと、言語毎のライブラリ一時キャッシュ先について予め仕組みを理解しておく必要があります。
- uses: actions/cache@v2 with: path: | ~/cache !~/cache/exclude key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
unfor19/install-aws-cli-action
awscliをv1からv2に移行する際の検証時には使って損をしません。
本番リリース用
Release時のTag追加やDeploy通知で役立つActionです。
mathieudutour/github-tag-action
現在最新のtagに対してインクリメント後のバージョンを返します。
- name: Bump version and push tag id: tag_version uses: mathieudutour/github-tag-action@v5 with: github_token: ${{ secrets.GITHUB_TOKEN }} default_bump: "minor"
actions/create-release
指定したtagにてreleaseを作成します。mathieudutour/github-tag-actionとの組み合わせで用いる事が多いかもしれません。
- name: Publish release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.tag_version.outputs.new_tag }} release_name: Release ${{ steps.tag_version.outputs.new_tag }} draft: false prerelease: false
chrnorm/deployment-action
DeploymentAPIのステータスを更新します。SlackBot等の通知指定を設定済みであれば、更新時に自動で通知されます。
- uses: chrnorm/deployment-action@releases/v1 name: Create GitHub deployment id: deployment with: token: "${{ github.token }}" environment: "${{ env.ENVIRONMENT }}" description: "${{ env.COMMIT_MESSAGE }}" - name: Update deployment status (in_progress) uses: chrnorm/deployment-status@releases/v1 with: token: "${{ github.token }}" state: "in_progress" description: "Start deploy" deployment_id: ${{ steps.deployment.outputs.deployment_id }}
補助
動作確認の手間を省きたい時等。
haya14busa/action-cond
Composite run stepsにて条件によって値の変更を行う時に利用してみました。シェルスクリプトでのデバッグ時間を割愛したい時には役立ちます。
- uses: haya14busa/action-cond@v1 id: update-pipenv-cache-key with: cond: ${{ inputs.pipenv-cache-key == null }} if_true: "pipenv-cache-key=${{ runner.os }}-python-${{ env.python-version }}-pipenv-${{ env.pipenv-version }}-airflow-${{ hashFiles('airflow/Pipfile.lock') }}" if_false: "${{ inputs.pipenv-cache-key }}"
あとがき
現時点で利用していたActionを挙げてみました。新しい仕組みを取り入れるというより、runで自力実装する手間を省くタイプのActionが多めです。
Marketplaceで楽になりそうなActionを時折探してはみるものの、大きくWorkflowの組み方が変わるようなActionが出てくることはそうありません。また、ツールをインストールするタイプのActionはツール自体がhost runner側で初期インストールされていくこともあるため、定期的に本当に必要なActionかどうか確認も大事です。