ノート: GitHub Packagesは現在GitHub Enterprise Server 2.22でベータです。 GitHub Enterprise Serverのインスタンスのベータに参加するには、サインアップフォームを使ってください。
GitHub ActionsとのGitHub Packagesについて
GitHub Actionsは、コードを保存するのと同じ場所でソフトウェア開発のワークフローを自動化し、プルリクエストやIssueで協力することを支援します。 個々のタスクを書き、アクションを呼び出し、それらを組み合わせてカスタムのワークフローを作成できます。 GitHub Actions では、エンドツーエンドの継続的インテグレーション (CI) と継続的デプロイメント (CD) 機能をリポジトリに直接ビルドすることができます。 詳しい情報については「GitHub Actionsについて」を参照してください。
ワークフローの一部としてパッケージの公開やインストールを行うことで、リポジトリのCI及びCDの機能を拡張できます。
GitHub 上のパッケージレジストリを認証する
GitHub Enterprise Server 上のパッケージレジストリに対して認証するには、認証のための個人アクセストークンではなく、GitHub Actions を有効化した際に GitHub Enterprise Server がリポジトリに対して自動的に作成する GITHUB_TOKEN
を使用することをお勧めします。 これは、ワークフローが実行されるリポジトリ内のパッケージに対する読み取り及び書き込み権限を持っています。 フォークでは、 GITHUB_TOKEN
には親リポジトリの読み取りアクセス権が付与されます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。
{{secrets.GITHUB_TOKEN}}
コンテキストを使って、ワークフロー中でこのGITHUB_TOKEN
を参照できます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。
リポジトリが所有するパッケージに対する権限とパッケージアクセスについて
ノート: リポジトリが所有するパッケージには、RubyGems、npm、Apache Maven、NuGet、Gradle、そしてdocker.pkg.github.com
というパッケージの名前空間を使うDockerパッケージが含まれます。
GitHub Actionsを有効化すると、GitHubはリポジトリにGitHub Appをインストールします。 GITHUB_TOKEN
シークレットは、GitHub Appインストールアクセストークンです。 このインストールアクセストークンは、リポジトリにインストールされたGitHub Appの代わりに認証を受けるために使うことができます。 このトークンの権限は、ワークフローを含むリポジトリに限定されます。 詳しい情報については「GITHUB_TOKENの権限」を参照してください。
GitHub Packagesを使用すると、GitHub Actionsワークフローで利用できるGITHUB_TOKEN
を通じてパッケージをプッシュしたりプルしたいできます。
アクションを使ったパッケージの公開
継続的インテグレーション (CI) フローの一環として、GitHub Actionsを使用してパッケージを自動的に公開できます。 この継続的デプロイメント (CD) に対するアプローチにより、コードが品質基準を満たしている場合に新しいパッケージの作成を自動化できます。 たとえば、開発者が特定のブランチにプッシュするたびに CI テストを実行するワークフローを作成してはいかがでしょう。 テストにパスすると、このワークフローは新しいパッケージバージョンをGitHub Packagesに公開できます。
パッケージのクライアントによって、設定のステップは様々です。 GitHub Actionsのワークフローの設定に関する一般的な情報については、「ワークフローの設定」を参照してください。
以下の例では、GitHub Actionsを使用してアプリケーションのビルドとテストを行い、それから自動的にDockerイメージを作成してGitHub Packagesに公開する方法を示しています。
リポジトリに新しいワークフローファイル (.github/workflows/deploy-image.yml
など) を作成し、以下のYAMLを追加します。
name: Create and publish a Docker image
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
on:
push:
branches: ['release']
jobs:
run-npm-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@main
with:
name: webpack artifacts
path: public/
run-npm-test:
runs-on: ubuntu-latest
needs: run-npm-build
strategy:
matrix:
os: [ubuntu-latest]
node-version: [12.x, 14.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- uses: actions/download-artifact@main
with:
name: webpack artifacts
path: public
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true
build-and-push-image:
runs-on: ubuntu-latest
needs: run-npm-test
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Log in to GitHub Docker Registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
push: true
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
上記に関連する設定については、次の表で説明しています。 ワークフロー中の各要素に関する詳細については、「GitHub Actionsのワークフロー構文」を参照してください。
|
release というブランチに変更をプッシュするたびに、Create and publish a Docker image ワークフローを実行するよう設定します。
|
|
このジョブではNPMをインストールし、それをアプリケーションのビルドに使用します。 |
|
このジョブではnpm test を使用してコードをテストします。 needs: run-npm-build コマンドにより、このジョブはrun-npm-build ジョブに依存するようになります。
|
|
このジョブはパッケージを公開します。 needs: run-npm-test コマンドにより、このジョブはrun-npm-test ジョブに依存するようになります。
|
|
パッケージを公開するアカウントとパスワードを使ってレジストリにログインするLog in to GitHub Docker Registry という新しいステップを作成します。 いったん公開されると、パッケージはここで定めたアカウントが所有することになります。
|
|
Build and push Docker image という新しいステップを作成します。 このステップは、build-and-push-image ジョブの一部として実行されます。
|
|
Dockerのbuild-push-action アクションを使用して、リポジトリのDockerfile を元にイメージをビルドします。 ビルドが成功すると、イメージをGitHub Packagesにプッシュします。
|
|
必要なパラメータをbuild-push-action アクションに送信します。 これらは以降の行で定義されます。
|
|
ビルドに成功したら、このイメージをレジストリにプッシュします。 |
|
ワークフローをトリガーしたコミットのSHAでイメージにタグ付けします。 |
この新しいワークフローは、リポジトリのrelease
という名前のブランチに変更をプッシュするたびに自動的に実行されます。 [Actions] タブで、この進捗を表示できます。
ワークフローが完成すると、その数分後にリポジトリで新しいパッケージが表示されます。 使用可能なパッケージを見つけるには、「リポジトリのパッケージを表示する」を参照してください。
アクションを使ったパッケージのインストール
GitHub Actionsを使い、CIフローの一部としてパッケージをインストールできます。 たとえば、開発者がコードをプルリクエストにプッシュすると、いつでもワークフローがGitHub Packagesによってホストされているパッケージをダウンロードしてインストールすることで、依存関係を解決するようにワークフローを設定できます。 そして、ワークフローはその依存関係を必要とするCIテストを実行できます。
GitHub Actionsを通じてGitHub Packagesがホストするパッケージをインストールするには、GITHUB_TOKEN
を使う際に最小限の設定もしくは追加の認証が必要です。
パッケージのクライアントによって、設定のステップは様々です。 GitHub Actionsのワークフローの設定に関する一般的な情報については、「ワークフローの設定」を参照してください。