发布到 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
的名称,使项目协作者容易理解其用途,而无需浏览工作流文件。
上述工作流将在创建新版本后执行几项操作:
- 名为
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 容器注册表在 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
处的容器注册表。