使用 GitHub Actions 发布和安装包

您可以配置 GitHub Actions 中的工作流程以自动发布或安装 GitHub Packages 的包。

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 和 GitHub AE。

关于 GitHub Packages 与 GitHub Actions

GitHub Actions 帮助您在您存储代码的同一位置自动执行软件开发工作流程,并协作处理拉取请求和议题。 您可以写入个别任务,称为操作,并结合它们创建一个自定义的工作流程。 通过 GitHub Actions 可直接在仓库中构建端到端持续集成 (CI) 和持续部署 (CD) 功能。 更多信息请参阅“关于 GitHub Actions”。

您可以通过在工作流程中发布或安装包来扩展仓库的 CI 和 CD 功能。

向 GitHub 上的软件包注册表验证

要向 GitHub Enterprise Server 上的软件包注册表验证,我们建议使用 GitHub Enterprise Server 在您启用 GitHub Actions 时自动为您的仓库创建的 GITHUB_TOKEN 来验证,而不是使用个人访问令牌来验证。 它对工作流程运行的仓库中的包具有读取和写入权限。 对于复刻,GITHUB_TOKEN 被授予对父仓库的读取访问权限。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

您还可以使用 {{secrets.GITHUB_TOKEN}} 上下文在工作流程文件中引用 GITHUB_TOKEN。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

关于仓库拥有的包的权限和包访问权限

注意:仓库拥有的软件包包括 RubyGems、npm、Apache Maven、Nuget、使用软件包命名空间 docker.pkg.github.com 的 Gradle 和 Docker 软件包。

启用 GitHub 操作后,GitHub 会在您的仓库中安装 GitHub 应用程序。 GITHUB_TOKEN 密码是一种 GitHub 应用程序安装访问令牌。 您可以使用安装访问令牌代表仓库中安装的 GitHub 应用程序进行身份验证。 令牌的权限仅限于包含您的工作流程的仓库。 更多信息请参阅“GITHUB_TOKEN 的权限”。

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:

YAML
name: Create and publish a Docker image

# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。

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@main
        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@main
        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 
    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 的工作流程语法”。

on:
  push:
    branches: ['release']
配置创建并发布包 Docker 映像工作流程,以在每次向名为 release 的分支推送更改时运行。
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@main
      with:
        name: webpack artifacts
        path: public/
此作业会安装 NPM 并使用它来构建应用程序。
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@main
      with:
        name: webpack artifacts
        path: public
    - name: npm install, and test
      run: |
        npm install
        npm test
      env:
        CI: true
此作业使用 npm test 测试代码。 needs: run-npm-build 命令使此作业依赖于 run-npm-build 作业。
build-and-push-image:
  runs-on: ubuntu-latest
  needs: run-npm-test
此作业将发布包。 needs: run-npm-test 命令使此作业依赖于 run-npm-test 作业。
- 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 }}
创建一个名为登录到 GitHub Docker 注册表的新步骤,以使用将发布包的帐户和密码登录到注册表。 发布后,包归此处定义的帐户所有。
- name: Build and push Docker image
创建名为构建并推送 Docker 映像的新步骤。 此步骤在 build-and-push-image 作业中运行。
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
使用 Docker build-push-action 操作构建基于仓库的 Dockerfile 的映像。 如果构建成功,它会将映像推送到 GitHub Packages。
with:
将所需参数发送到 build-push-action 操作。 这些将在后面的行中定义。
push: true
此映像如已成功构建,则推送至注册表。
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
使用触发工作流程的提交的 SHA 标记映像。

每次将更改推送至仓库中名为 release 的分支时,这个新工作流程都会自动运行。 您可以在 Actions(操作)选项卡中查看进度。

工作流程完成几分钟后,新包将在您的仓库中可见。 要查找可用的包,请参阅“查看仓库的包”。

使用操作安装包

您可以使用 GitHub Actions 将安装包作为 CI 流程的一部分。 例如,您可以配置一个工作流程:每当开发者向拉取请求推送代码时,该工作流程就会通过下载并安装 GitHub Packages 托管的包来解析依赖项。 然后,该工作流程就可以运行需要这些依赖项的 CI 测试。

使用 GITHUB_TOKEN 时,通过 GitHub Actions 安装 GitHub Packages 托管的包只需极少的配置或额外身份验证。

配置步骤因包客户端而异。 有关为 GitHub Actions 配置工作流程的一般信息,请参阅“配置工作流程”。

此文档对您有帮助吗?

隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。