GitHub Packages と GitHub Container Registry に公開する
ここでは、ワークフローを使用して GitHub Packages に公開する方法と、Docker イメージをビルド、認証、タグ付けし、GitHub Container Registry にプッシュするために必要な手順について説明します。
ワークフローを使用して GitHub Packages に公開する
GitHub Packages により、パッケージの公開と使用を安全に行うことができます。また、コードと共にパッケージを保存したり、パッケージをチームやオープン ソースのコミュニティで公開して共有したりすることができます。 また、GitHub Actions を使用してパッケージを自動化することもできます。
リポジトリに新しいリリースが作成されるたびに実行される基本的なワークフローの例を以下に示します。 テストが成功した場合、パッケージは GitHub Packages に公開されます。
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 12
- run: npm ci
- run: npm test
publish-gpr:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 12
registry-url: https://npm.pkg.github.com/
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
まず、ワークフロー ファイルが .github/workflows
ディレクトリに存在する必要があります。 ワークフロー ファイルに移動しなくても、プロジェクト コラボレーターがその目的を簡単に理解できるように、新しいリリースが作成されるたびに新しいパッケージを公開するワークフローに release-package.yml
などの名前を付けておくのが一般的です。
上記のワークフローでは、新しいリリースが作成された後、いくつかの処理が行われます。
build
という名前のジョブによりnpm ci
("ci" は継続的インテグレーションを表す) が実行され、package-lock.json
ファイルから依存関係が直接インストールされ、プロジェクトのテストも行われます。build
ジョブが成功すると、publish-gpr
という名前のジョブによってパッケージが公開されます。- このワークフローでは、認証用のアクセス トークンを使用して
registry-url: https://npm.pkg.github.com/
にパッケージを公開します。
GitHub Container Registry を使用して Docker コンテナー イメージをホストおよび管理する
GitHub Packages では、運用業務、開発、リリース、デプロイなどの、アプリケーション ライフサイクル全体を管理するためのコンテナー、Kubernetes、およびその他のクラウドネイティブ テクノロジの使用がサポートされます。 GitHub Packages には、コンテナー イメージ固有のニーズをサポートするように設計されたコンテナー レジストリも用意されています。 GitHub Container Registry を使用すると、GitHub 組織または個人ユーザー アカウント内の Docker コンテナー イメージをシームレスにホストおよび管理できます。 GitHub Container Registry では、詳細なアクセス許可を使用してパッケージを管理およびアクセスできるユーザーを構成できます。
コンテナー レジストリを使うと、次のことができます。
- コンテナー イメージを、リポジトリではなく、組織内とユーザー アカウント内に格納する。
- コンテナー イメージの詳細なアクセス許可を設定する。
- パブリック コンテナー イメージに匿名でアクセスする。
イメージを構築して、ghcr.io
で GitHub Container Registry サービスに認証およびサインインしたら、次のコマンドで、最新バージョンのイメージをタグ付けし、コンテナー レジストリにプッシュできます。
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
docker tag IMAGE_ID ghcr.io/OWNER/IMAGE_NAME:latest
docker push ghcr.io/OWNER/IMAGE_NAME:latest
Note
GitHub Actions ワークフローを使って認証する場合は、以下に対して GITHUB_TOKEN を使用できます。
PACKAGE-REGISTRY.pkg.github.com
のパッケージ レジストリ。ghcr.io/OWNER/IMAGE-NAME
のコンテナー レジストリ。