GitHub Actions で プライベートリポジトリの actions を組織で共有する

2023-07-14

はじめに

こんにちは。株式会社 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に従って、導入方法を説明します。

  1. actions・reusable workflows をプライベートのリポジトリに作成する
  2. Organization 内の他のプライベートリポジトリからのアクセスを許可する
  3. 他のリポジトリから利用する

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] を開きます。

private-github-actions-settings

[Access] の項目で、[Accessible from repositories in the '{組織名}' organization] を選択し [Save] をクリックします。

private-github-actions-job

他のリポジトリから利用する

他のリポジトリから共有用のプライベートリポジトリの 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

実際に動かすと次のようになります。

private-github-actions-job

Tips

  • actions は呼び出しにブランチ名やタグ名を指定できます。これを使い開発時はブランチを指定してテストを行い、本番環境ではタグを指定して利用することができます。

  • プライベートリポジトリの actions などは dependabot で更新を行うことができます。共有リポジトリでリリースタグを付けることで、依存しているリポジトリで更新 PR を自動作成することができます。

まとめ

このように社内の actions を共有化することで、同じようなコードを書くリポジトリを減らすことができ、メンテナンス性を高めることができます。 新規でリポジトリを作成する際も、共有リポジトリの actions を利用することで、導入コストを下げることができます。

また弊社 Belong では開発生産性向上に興味のある方を募集しています。 もし弊社に興味を持っていただけたら <エンジニアリングチーム紹介ページ> をご覧いただけたら幸いです。

Footnotes

  1. GitHub Actions – Sharing actions and reusable workflows from private repositories is now GA

  2. Sharing actions and workflows with your organization

  3. Allowing access to components in a private repository