关于 GitHub Packages 与 GitHub Actions
GitHub Actions 帮助您在您存储代码的同一位置自动执行软件开发工作流程,并协作处理拉取请求和议题。 您可以写入个别任务,称为操作,并结合它们创建一个自定义的工作流程。 通过 GitHub Actions 可直接在仓库中构建端到端持续集成 (CI) 和持续部署 (CD) 功能。 有关详细信息,请参阅“了解 GitHub Actions”。
您可以通过在工作流程中发布或安装包来扩展仓库的 CI 和 CD 功能。
要对 GitHub Enterprise Server 上的包注册表进行身份验证,我们建议使用 GitHub Enterprise Server 在你启用 GitHub Actions 时自动为注册表创建的 GITHUB_TOKEN
。 应在工作流文件中设置此访问令牌的权限,以授予 contents
范围的读取访问权限,并授予 packages
范围的写入访问权限。 对于分支,向 GITHUB_TOKEN
授予了对父存储库的读取访问权限。 有关详细信息,请参阅“自动令牌身份验证”。
可使用 {{secrets.GITHUB_TOKEN}}
上下文在工作流文件中引用 GITHUB_TOKEN
。 有关详细信息,请参阅“自动令牌身份验证”。
关于权限和包访问
启用 GitHub 操作后,GitHub 会在您的仓库中安装 GitHub 应用程序。 GITHUB_TOKEN
机密是 GitHub 应用安装访问令牌。 您可以使用安装访问令牌代表仓库中安装的 GitHub 应用程序进行身份验证。 令牌的权限仅限于包含您的工作流程的仓库。 有关详细信息,请参阅“自动令牌身份验证”。
使用 GitHub Packages 能通过可用于 GitHub Actions 工作流的 GITHUB_TOKEN
推送和拉取包。
使用操作发布包
您可以使用 GitHub Actions 在持续集成 (CI) 流程中自动发布包。 如果代码符合您的质量标准,可使用这种持续部署 (CD) 方法自动创建新的包版本。 例如,您可以创建一个每当开发者向特定分支推送代码时运行 CI 测试的工作流程。 如果测试通过,则工作流程可以将新的包版本发布到 GitHub Packages。
配置步骤因包客户端而异。 有关为 GitHub Actions 配置工作流的一般信息,请参阅“使用工作流”。
下面的示例演示如何使用 GitHub Actions 构建和测试应用程序,然后自动创建 Docker 映像并将其发布到 GitHub Packages:
在存储库中创建新的工作流文件(例如 .github/workflows/deploy-image.yml
),并添加以下 YAML:
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档。
# GitHub 建议将操作固定到提交 SHA。
# 若要获取较新版本,需要更新 SHA。
# 还可以引用标记或分支,但该操作可能会更改而不发出警告。
name: Create and publish a Docker image
on:
push:
branches: ['release']
jobs:
run-npm-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@v2
with:
name: webpack artifacts
path: public/
run-npm-test:
runs-on: ubuntu-latest
needs: run-npm-build
strategy:
matrix:
os: [ubuntu-latest]
node-version: [12.x, 14.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- uses: actions/download-artifact@v2
with:
name: webpack artifacts
path: public
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true
build-and-push-image:
runs-on: ubuntu-latest
needs: run-npm-test
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Log in to GitHub Docker Registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
push: true
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
下表介绍了相关设置: 有关工作流中每个元素的完整详细信息,请参阅“GitHub Actions 的工作流语法”。
```yaml on: push: branches: ['release'] ``` |
配置 Create and publish a Docker image 工作流,以便在每次向名为 release 的分支推送更改时运行。
|
|
此作业会安装 npm 并使用它来生成应用。 |
|
此作业使用 npm test 来测试代码。 needs: run-npm-build 命令使此作业依赖于 run-npm-build 作业。
|
```yaml build-and-push-image: runs-on: ubuntu-latest needs: run-npm-test ``` |
此作业将发布包。 needs: run-npm-test 命令使此作业依赖于 run-npm-test 作业。
|
```yaml permissions: contents: read packages: write ``` |
为此作业中的操作设置授予 GITHUB_TOKEN 的权限。
|
```yaml - name: Log in to GitHub Docker Registry uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: registry: docker.pkg.github.com username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} ``` |
新建一个名为 Log in to GitHub Docker Registry 的步骤,以使用将发布包的帐户和密码登录到注册表。 发布后,包的范围限定为此处定义的帐户。
|
```yaml - name: Build and push Docker image ``` |
新建一个名为 Build and push Docker image 的步骤。 此步骤在 build-and-push-image 作业中运行。
|
```yaml uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc ``` |
使用 Docker build-push-action 操作生成基于存储库的 Dockerfile 的映像。 如果构建成功,它会将映像推送到 GitHub Packages。
|
```yaml with: ``` |
将所需的参数发送到 build-push-action 操作。 这些将在后面的行中定义。
|
```yaml push: true ``` | 此映像如已成功构建,则推送至注册表。 |
```yaml tags: | docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }} ``` | 使用触发工作流程的提交的 SHA 标记映像。 |
每次将更改推送到存储库中名为 release
的分支时,这个新工作流都会自动运行。 可在“操作”选项卡中查看进度。
工作流程完成几分钟后,新包将在您的仓库中可见。 若要查找可用的包,请参阅“查看包”。
使用操作安装包
您可以使用 GitHub Actions 将安装包作为 CI 流程的一部分。 例如,您可以配置一个工作流程:每当开发者向拉取请求推送代码时,该工作流程就会通过下载并安装 GitHub Packages 托管的包来解析依赖项。 然后,该工作流程就可以运行需要这些依赖项的 CI 测试。
使用 GITHUB_TOKEN
时,通过 GitHub Actions 安装 GitHub Packages 托管的包只需极少的配置或额外身份验证。
配置步骤因包客户端而异。 有关为 GitHub Actions 配置工作流的一般信息,请参阅“使用工作流”。