其他分享
首页 > 其他分享> > 使用 GitHub Actions 将容器镜像推送到 GitHub Container Registry

使用 GitHub Actions 将容器镜像推送到 GitHub Container Registry

作者:互联网

我的工作中,我构建了很多与客户分享的示例,以向他们展示事情是如何运作的。我的很多客户都对 Azure 容器应用程序感兴趣,所以我希望能够为他们提供带有预构建容器映像的示例,而不必共享整个应用程序源代码(尤其是如果我有一堆的基本微服务,实际上并不需要包含在示例中)。

进入 GitHub 容器注册表!(GHCR) 我看过几个示例存储库,其中从 GHCR 引用了容器图像,但我不知道它是否有效或如何将图像推送到它。事实证明,这相当简单。

在这篇文章中,我将讨论什么是 GHCR,以及我们如何使用 GitHub Actions 将容器镜像推送到它!

什么是 GitHub 容器注册表?

GitHub Container Registry 将容器图像存储在您的组织或个人帐户中,并允许您将图像与存储库相关联。它目前同时支持Docker Image Manifest V2、Schema 2和Open Container Initiative (OCI) 规范。

在 GitHub 中,我们可以在 GitHub Actions 工作流文件中构建我们的 docker 图像并将其推送到 GHCR,并使这些图像私下或公开可用(我将我的图像公开用于我的示例)。

假设我有以下 Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
LABEL org.opencontainers.image.source="https://github.com/willvelida/dapr-store-app"
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Store/Store.csproj", "Store/"]
RUN dotnet restore "Store/Store.csproj"
COPY . .
WORKDIR "/src/Store"
RUN dotnet build "Store.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Store.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Store.dll"]

这个 Dockerfile 只是构建一个简单的 Blazor Server 应用程序(它是一个非常通用的 Dockerfile,适用于所有 ASP.NET Core 应用程序)。

我们不会将其推送到 Docker Hub 或 Azure 容器注册表,而是设置一个 GitHub Actions 工作流文件以将此容器映像推送到 GHCR。

让我们看一下如何向 GHCR 进行身份验证。

使用 GITHUB_TOKEN 向 GHCR 进行身份验证

向 GHCR 进行身份验证的推荐方法是使用GITHUB_TOKENGitHub 为您提供一个令牌,您可以使用该令牌代表 GitHub Actions 进行身份验证。在每个工作流程运行开始时,GitHub 将自动创建一个唯一的GITHUB_TOKEN密码以在工作流程中使用,您可以使用它来进行身份验证。

当 GHCR 处于 Beta 阶段时,您可以使用个人访问令牌 (PAT) 进行身份验证。您需要注意您授予 PAT 令牌的权限。随着GITHUB_TOKEN,这具有将容器图像推送到 GHCR 所需的足够权限

使用个人访问令牌向 GHCR 进行身份验证

我最初使用时确实遇到了一些麻烦GITHUB_TOKEN,所以为了开始,我使用了 PAT 令牌。要创建一个,请转到Settings/Developer settings,单击Personal access tokens/Tokens (classic)然后单击Generate new token要将图像推送到 GHCR,您只需要以下权限:

创建 PAT 后,您可以将其作为存储库机密存储在包含 Dockerfile 的 GitHub 存储库中。

在您的 GitHub Actions 工作流程文件中,您可以使用以下方式向 GHCR 进行身份验证:

- name: 'Login to GitHub Container Registry'
        run: |
          echo $CR_PAT | docker login ghcr.io -u <Your-GitHub-username> --password-stdin

由于建议使用GITHUB_TOKEN而不是 PAT 令牌,因此我们将继续使用它。

创建 GitHub Actions 工作流

现在我们已经有了向 GHCR 进行身份验证的方法,我们可以创建一个 GitHub Actions 工作流文件来推送我们的容器镜像。让我们来看看以下内容:

name: Deploy Images to GHCR

env:
  DOTNET_VERSION: '6.0.x'

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
      push-store-image:
        runs-on: ubuntu-latest
        defaults:
          run:
            working-directory: './Store'
        steps:
          - name: 'Checkout GitHub Action'
            uses: actions/checkout@main

          - name: 'Login to GitHub Container Registry'
            uses: docker/login-action@v1
            with:
              registry: ghcr.io
              username: ${{github.actor}}
              password: ${{secrets.GITHUB_TOKEN}}

          - name: 'Build Inventory Image'
            run: |
              docker build . --tag ghcr.io/<your-GitHub-username>/store:latest
              docker push ghcr.io/<your-GitHub-username>/store:latest

标签:github,actions,Azure,构建,身份验证
来源: