アクションとワークフローを管理する
ここでは、企業内で GitHub のアクションとワークフローを共有し、その使用を管理するために、GitHub Enterprise Cloud と GitHub Enterprise Server で使用できるさまざまなツールと戦略について説明します。
内容は、紹介しているツールを使用できるレベルに応じて構成されています ("エンタープライズ レベル" または "組織レベル")。
エンタープライズ レベル
GitHub Actions の使用ポリシーを構成する
多くの場合、GitHub Actions ワークフローには、ワークフロー内で実行される独立したコマンドのセットであるアクションが含まれています。 ワークフローを作成する際には、独自のアクションを作成して使用することや、GitHub Marketplace で公開されているコミュニティのアクションを参照することができます。 このような理由から、ユーザーが悪意のあるサードパーティーのアクションを使用するのを防ぐために、企業内のワークフローとアクションに使用ポリシーを構成することが不可欠です。
Enterprise Cloud と (GitHub Connect が企業の構成で有効な場合は) Enterprise Server には、ポリシーを構成するためのオプションがいくつかあります。
企業の GitHub Actions の使用ポリシーを構成するには、エンタープライズ アカウントに移動し、サイドバーの [Policies] (ポリシー) > [Actions] (アクション) に移動します。 次のオプションが表示されます。
上部にある [Enable for all organizations](すべての組織で有効にする) というドロップダウンでは、エンタープライズ内のどの組織が GitHub Actions を使用できるか (すべての組織、一部の組織、まったく使用できない組織) を決め、その下の 3 つのオプションでは、これらの組織内での GitHub Actions の制限レベルを定義することができます。
企業内で特定のアクションのみを使用できるようにする場合は、[Allow enterprise, and select non-enterprise, actions and reusable workflows] (エンタープライズを許可し、非エンタープライズ、アクション、再利用可能なワークフローを選択する) を選択し、ユース ケースに応じてオプションを選択します。
Enterprise Server のパブリック アクションを手動で同期する
GitHub で作成された公式のアクションのほとんどは、Enterprise Server に自動的にバンドルされており、特定の時点で GitHub Marketplace から取得されます。 主に、actions/checkout
、actions/upload-artifact
、actions/download-artifact
、actions/labeler
、さまざまな actions/setup-
アクションなどがあります。 エンタープライズ インスタンスに含まれるすべての公式アクションを取得するには、インスタンスでアクション組織 (https://HOSTNAME/actions.) を参照します
「GitHub Actions の使用ポリシーを構成する」セクションで説明されているように、GitHub Marketplace で公開されているパブリック アクションに自動的にアクセスし、その使用ポリシーを構成するように Enterprise Server を構成できます。 ただし、エンタープライズ内で使用できるようにする必要があるパブリック アクションをより厳密に制御する場合は、actions-sync
ツールを使って手動でアクションをダウンロードし、エンタープライズ インスタンスに同期させることができます。
組織レベル
会社の標準を文書化する
多くの場合、GitHub Actions ワークフローを作成するには、複数のファイルを記述し、複数のリポジトリを作成して、ワークフロー自体を指定する必要があります。 また、ワークフローで使用するアクション、コンテナー、ランナーの作成も必要になります。 Enterprise Cloud または Enterprise Server インスタンスのユーザー数にもよっては、GitHub Actions ワークフローを作成するための標準が会社にないと、すぐに混乱した状態になる可能性があります。
ベスト プラクティスとして、GitHub wiki または組織内の誰でもアクセスできるリポジトリにマークダウン ファイルとして以下の内容を文書化することをお勧めします。
- ストレージのリポジトリ
- ファイルやフォルダーの名前付け規則
- 共有コンポーネントの場所
- 継続的なメンテナンスの計画
- 投稿に関するガイドライン
ワークフロー テンプレートを作成する
ワークフロー テンプレートは、企業内で確実に自動化を再利用し、保守するための優れた方法です。 Enterprise Cloud と Enterprise Server の両方で、組織の .github
リポジトリへの書き込み権限を持つユーザーは、同じ書き込み権限を持つ他の組織のメンバーが使用できるワークフロー テンプレートを作成することができます。 ワークフロー テンプレートを使用して、組織のパブリックおよびプライベート リポジトリに新しいワークフローを作成することができます。
ワークフロー テンプレートの作成は、次の 2 つの手順で行います。
yml
ワークフロー ファイルを作成します。ワークフローを作成するときに、ユーザーにテンプレートをどのように提示するかを記述した
json
メタデータ ファイルを作成します。Note
メタデータ ファイルは、ワークフロー ファイルと同じ名前にする必要があります。 拡張子
.yml
ではなく.properties.json
を付ける必要があります。 たとえば、octo-organization-ci.properties.json
という名前のファイルには、octo-organization-ci.yml
という名前のワークフロー ファイルのメタデータが格納されています。
両方のファイルは、パブリック .github
リポジトリと、workflow-templates
という名前のディレクトリに配置する必要があります。 これらがまだ組織内に存在していない場合は、必要に応じて作成します。
基本的なワークフロー ファイルの例を次に示します。
name: Octo Organization CI
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run a one-line script
run: echo Hello from Octo Organization
上のファイルでは $default-branch
というプレースホルダーが使われていることに注意してください。 テンプレートを使用してワークフローを作成すると、このプレースホルダーは自動的にリポジトリの既定ブランチの名前に置き換えられます。
ワークフロー ファイルのために作成するメタデータ ファイルを次に示します。
{
"name": "Octo Organization Workflow",
"description": "Octo Organization CI workflow template.",
"iconName": "example-icon",
"categories": [
"Go"
],
"filePatterns": [
"package.json$",
"^Dockerfile",
".*\\.md$"
]
}
メタデータ ファイルには、次のパラメーターが使用されます。
パラメーター | Description | 必須 |
---|---|---|
name |
使用できるテンプレートの一覧に表示されるワークフロー テンプレートの名前。 | はい |
description |
使用できるテンプレートの一覧に表示されるワクフロー テンプレートの説明。 | はい |
iconName |
テンプレート一覧に表示されるワークフローのエントリのアイコンを定義します。 SVG アイコンは同じ名前にする必要があります。また、workflow-templates ディレクトリに格納されている必要があります。 たとえば、example-icon.svg という名前の SVG ファイルは example-icon として参照されます。 |
いいえ |
categories |
ワークフローの言語カテゴリを定義します。 ユーザーが使用できるテンプレートを表示したときに、同じ言語に一致するテンプレートがより目立つように表示されます。 | いいえ |
filePatterns |
ユーザーのリポジトリのルート ディレクトリに、定義された正規表現に一致するファイルがある場合、そのテンプレートを使用できるようにします。 | いいえ |
ワークフロー テンプレートが作成されると、組織内のユーザーは [Actions] (アクション) > [New workflow] (新しいワークフロー) > [Workflows created by _your_organization_name] (<あなたの組織名> によって作成されたワークフロー) でそのテンプレートを確認できます。