发布到 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的名称,以便项目合作者无需导航到工作流文件即可轻松了解其目的。
创建新版本后,前述的工作流会执行一些操作:
- 名为
build的作业运行npm ci(“ci”,用于持续集成),直接从package-lock.json文件安装依赖项,并进行项目测试。 - 一旦
build作业成功,名为publish-gpr的作业将发布该包。 - 工作流将包发布到
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处的容器注册表。