发布到 GitHub Packages 和 GitHub Container Registry

已完成

在这里,你将了解使用工作流发布到 GitHub Packages 的基础知识,以及生成、验证和标记 Docker 映像并将其推送到 GitHub 容器注册表所需的步骤。

使用工作流发布到 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 的名称,使项目协作者容易理解其用途,而无需浏览工作流文件。

上述工作流将在创建新版本后执行几项操作:

  1. 名为 build 的作业将运行 npm ci(“ci”表示持续集成),以直接从 package-lock.json 文件安装依赖项以及对项目进行测试。
  2. build 作业完成后,名为 publish-gpr 的作业将发布包。
  3. 该工作流将使用访问令牌进行身份验证,并将包发布到 registry-url: https://npm.pkg.github.com/

使用 GitHub Container Registry 来托管和管理 Docker 容器映像

GitHub Packages 支持使用容器、Kubernetes 和其他云原生技术来管理其整个应用程序生命周期(包括生产运营、开发、发布和部署)。 GitHub Packages 还提供了一个容器注册表,旨在满足容器映像的独特需求。 可以使用 GitHub 容器注册表在 GitHub 组织或个人用户帐户中无缝托管和管理 Docker 容器映像。 借助 GitHub 容器注册表,可以使用细化权限来配置哪些用户可管理和访问包。

借助容器注册表,你可以:

  • 将容器映像存储在组织帐户和用户帐户中,而不是存储库中。
  • 为容器映像设置细化权限。
  • 匿名访问公共容器映像。

生成映像并进行身份验证且登录到 GitHub 容器注册表服务(网址为:ghcr.io)后,可以使用以下命令来标记映像的最新版本并将其推送到容器注册表:

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

注意

若要使用 GitHub Actions 工作流进行身份验证,可以使用 GITHUB_TOKEN:

  • 对于 PACKAGE-REGISTRY.pkg.github.com 处的包注册表。
  • 对于 ghcr.io/OWNER/IMAGE-NAME 处的容器注册表。