GitHub Actions で プライベートリポジトリの actions を組織で共有する
はじめに
こんにちは。株式会社 Belong で SRE をしている shigwata です。
今回は、GitHub Actions でのプライベートリポジトリからの actions と reusable workflows の共有について紹介します。
もともと Belong では、CI/CD に CircleCI を利用していましたが、徐々に GitHub Actions に移行しています。CircleCI ではプライベート Orbs としてワークフローを共有していましたが、GitHub Actions では、プライベートリポジトリからの actions と reusable workflows の共有ができず、同じようなコードを書くリポジトリに設定していました。 これが、2022 年 12 月に、プライベートリポジトリからの actions と reusable workflows の共有1ができるようになりました。
要約
- プライベートリポジトリの actions と reusable workflows は同じ組織が所有する他のプライベートリポジトリから使用できる
- パブリックリポジトリからは使用できない
導入方法
GitHub のドキュメント2に従って、導入方法を説明します。
- actions・reusable workflows をプライベートのリポジトリに作成する
- Organization 内の他のプライベートリポジトリからのアクセスを許可する
- 他のリポジトリから利用する
actions・reusable workflows をプライベートのリポジトリに作成する
まずは共有用のプライベートリポジトリを作成します。 次に、共有したい actions や reusable workflows を作成します。 今回は actions を作成します。
# .github/actions/hello/action.yaml
name: 'Hello World'
description: 'Hello World'
inputs:
who-to-greet:
description: 'Who to greet'
required: true
default: 'World'
runs:
using: composite
steps:
- run: echo Hello ${{ inputs.who-to-greet }}.
shell: bash
Organization 内の他のプライベートリポジトリからのアクセスを許可する
他のプライベートリポジトリから actions などを利用するためにはアクセスを許可3する必要があります。
共有用のプライベートリポジトリの [Settings] -> [Actions] -> [General] を開きます。
[Access] の項目で、[Accessible from repositories in the '{組織名}' organization] を選択し [Save] をクリックします。
他のリポジトリから利用する
他のリポジトリから共有用のプライベートリポジトリの actions を利用するためには、
.github/actions/{actions名}@{ブランチ名}
という形式で指定します。
# .github/workflows/hello.yaml
name: 'hello'
on: push
jobs:
hello:
runs-on: ubuntu-latest
steps:
- name: 'hello'
uses: belong-inc/gha-example/.github/actions/hello@main
実際に動かすと次のようになります。
Tips
-
actions は呼び出しにブランチ名やタグ名を指定できます。これを使い開発時はブランチを指定してテストを行い、本番環境ではタグを指定して利用することができます。
-
プライベートリポジトリの actions などは dependabot で更新を行うことができます。共有リポジトリでリリースタグを付けることで、依存しているリポジトリで更新 PR を自動作成することができます。
まとめ
このように社内の actions を共有化することで、同じようなコードを書くリポジトリを減らすことができ、メンテナンス性を高めることができます。 新規でリポジトリを作成する際も、共有リポジトリの actions を利用することで、導入コストを下げることができます。
また弊社 Belong では開発生産性向上に興味のある方を募集しています。 もし弊社に興味を持っていただけたら <エンジニアリングチーム紹介ページ> をご覧いただけたら幸いです。