发布到 GitHub Packages 和 GitHub Container Registry

已完成

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

使用工作流发布到 GitHub Packages

借助 GitHub 包,可以安全地发布和使用包、将包与代码一起存储,并与团队私下共享包,或者与开源社区公开共享包。 也可使用 GitHub Actions 来自动执行包。

下面是在存储库中创建新版本时运行的基本工作流的示例。 如果测试通过,则将包发布到 GitHub 包。

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 容器注册表托管和管理 Docker 容器映像

GitHub 包支持使用容器、Kubernetes 和其他云原生技术来管理其整个应用程序生命周期,包括生产作、开发、发布和部署。 GitHub 包还提供一个容器注册表,旨在支持容器映像的独特需求。 可以使用 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 处的容器注册表。