我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

使用 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 Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单

关于 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、Gradle 和 Docker 包,它们使用包命名空间 docker.pkg.github.com

启用 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 package
    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@v1
            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@v1
            with:
              registry: docker.pkg.github.com
              username: ${{ github.actor }}
              password: ${{ secrets.GITHUB_TOKEN }}
          - name: Build container image
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: |
                docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
                docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}

    下表介绍了相关设置:

    on:
      push:
        branches: ['release']
    配置 Create and publish a package 工作流程,以在每次向名为 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: [14.x]
      steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          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@v1
      with:
        registry: docker.pkg.github.com
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}
    创建一个名为登录到 GitHub Docker 注册表的新步骤,以使用将发布包的帐户和密码登录到注册表。 发布后,包归此处定义的帐户所有。
    - name: Build container image
    创建名为 Build container image 的新步骤。 此步骤在 build-and-push-image 作业中运行。
    uses: docker/build-push-action@v2
    使用 Docker build-push-action 操作构建基于仓库的 Dockerfile 的映像。 如果构建成功,它会将映像推送到 GitHub Packages。
    with:
    将所需参数发送到 build-push-action 操作。 这将在后面的行中定义。
    push: true
    此映像如已成功构建,则推送至注册表。
    tags: |
    docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
    docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}
    使用 git ref 标记已发布的软件包(例如用于创建包的分支名称)以及提交 SHA 。
    • 每次将更改推送至仓库中名为 release 的分支时,这个新工作流程都会自动运行。 您可以在 Actions(操作)选项卡中查看进度。
    • 工作流程完成几分钟后,新包将在您的仓库中可见。 要查找可用的包,请参阅“查看仓库的包”。

    使用操作安装包

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

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

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

此文档对您有帮助吗? 隐私政策

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

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

做出贡献

或, 了解如何参与。