GitHubには、リポジトリに変更を加えるたびに自動ビルド、テスト、その他のスクリプトを実行するGitHubアクションと呼ばれる機能があります。この便利なユースケースの1つは、Dockerコンテナを自動的にビルドしてコンテナレジストリにプッシュすることです。
GitHubの新しいコンテナレジストリ
GitHub Container Registryと呼ばれるGitHubの新しいコンテナレジストリは、DockerHubなどのほとんどのレジストリとは少し異なります。これは、パッケージをソースコードリポジトリに関連付けるパッケージストレージシステムであるGitHubパッケージの拡張機能として機能します。パッケージは、リポジトリからビルドしてプッシュできます。多くの場合、GitHubActionsパイプラインを使用して自動的にプッシュされます。
GitHub Container Registryは、Docker固有の互換性をGitHubパッケージに追加するだけで、docker pull
を実行するためのコンテナーレジストリのように機能します。 およびその他のCLIコマンド。
GitHubのコンテナレジストリに公開する必要はありません。いくつかの構成を使用して、アクションからDockerHubに公開できます。ただし、事前に作成されたアクションは、そのままGHCRで機能するため、設定がはるかに簡単です。
GitHubパッケージへの自動ビルドを設定する方法
まず、リポジトリが必要です。パッケージのみを公開している場合でも、GHCRの形式は次のとおりであるため、リポジトリが必要です。
ghcr.io/username/repository/image:version
リポジトリを設定し、「アクション」をクリックして新しいアクションを作成します。 [より継続的インテグレーションワークフロー]で、[Dockerコンテナの公開]をクリックします。
これにより、スターターテンプレートが生成されます。これを機能させるには、いくつかの変更が必要です。まず、IMAGE_NAME
変数を画像名に変更する必要があります。
次に、39行目で、GHCRにログインする場所を確認できます。
run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
現在、サポートされている認証スキームはパーソナルアクセストークン(PAT)のみです。これは、アカウント全体のアクセスを許可するため、セキュリティには適していません。 GitHubはこれを認識しており、将来に向けてより良い修正に取り組んでいますが、それまでの間、GitHub ActionsワークフローからGHCRを使用する場合は、リポジトリのシークレットにPATを保存する必要があります。ここにあるのは恐ろしいことです。
まず、[設定]>[開発者設定]>[パーソナルアクセストークン]に移動して、新しいトークンを作成する必要があります。このトークンにはwrite:packages
が必要です およびdelete:packages
設定。何らかの理由で、書き込みパッケージを選択すると、「リポジトリのフルコントロール」が自動的に選択されます。これをオフにする必要があります。
次に、リポジトリの設定に移動し、CR_PAT
という新しいシークレットを作成します 、アクションに一致します。
アクションに戻り、[コミットの開始]をクリックしてリポジトリにプッシュします。
コミットされると、パッケージを実行およびビルドするワークフローがトリガーされます。 [アクション]タブで、実行中のすべてのワークフローのステータスを監視できます。ここでは、デフォルトのアクションでは、このイメージにはなかったテストの実行が想定されているため、失敗しました。
成功すると、レジストリ、リポジトリのメインページの[パッケージ]、またはプロファイルのパッケージの下にコンテナが表示されます。