跳至主要内容

将自定义工作流与 GitHub Pages 结合使用

您可以通过创建工作流文件或从预定义工作流中选择来利用 GitHub Actions 和 GitHub Pages。

哪些人可以使用此功能?

GitHub Pages 可用于具有 GitHub Free 和 GitHub Free for organizations 的公共存储库,以及具有 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有存储库。有关更多信息,请参阅“GitHub 计划”。

从 2024 年 6 月 30 日起,所有 GitHub Pages 构建都将使用 GitHub Actions。无需进行其他更改,但必须在存储库中启用 GitHub Actions 才能继续构建。有关启用 GitHub Actions 的更多信息,请参阅“管理存储库的 GitHub Actions 设置”。

关于自定义工作流

自定义工作流允许通过使用 GitHub Actions 构建 GitHub Pages 网站。您仍然可以通过工作流文件选择要使用的分支,但您可以使用自定义工作流完成更多操作。要开始使用自定义工作流,您必须首先为当前存储库启用它们。有关更多信息,请参阅“为 GitHub Pages 网站配置发布源”。

配置 configure-pages 操作

GitHub Actions 通过 configure-pages 操作启用 GitHub Pages 的使用,该操作还允许您收集有关网站的不同元数据。有关更多信息,请参阅 configure-pages 操作。

要在所需的 workflow 中使用该操作,请将其代码段放在 jobs 下方。

- name: Configure GitHub Pages
  uses: actions/configure-pages@v3

此操作有助于支持从任何静态网站生成器部署到 GitHub Pages。为了使此过程不那么重复,您可以对一些最广泛使用的静态网站生成器使用入门工作流。有关更多信息,请参阅“使用入门工作流”。

配置 upload-pages-artifact 操作

upload-pages-artifact 操作使您能够打包和上传工件。GitHub Pages 工件应为包含单个 tar 文件的压缩 gzip 存档。tar 文件的大小必须小于 10GB,并且不应包含任何符号链接或硬链接。有关更多信息,请参阅 upload-pages-artifact 操作。

要在当前工作流中使用该操作,请将此代码段放在 jobs 下方。

- name: Upload GitHub Pages artifact
  uses: actions/upload-pages-artifact@v1

部署 GitHub Pages 工件

deploy-pages 操作处理部署工件所需的设置。为了确保正常运行,应满足以下要求

  • 作业必须至少具有 pages: writeid-token: write 权限。
  • needs 参数必须设置为构建步骤的 id。不设置此参数可能会导致独立部署,该部署会持续搜索尚未创建的工件。
  • 必须建立一个 environment 来强制执行分支/部署保护规则。默认环境为 github-pages
  • 要将页面的 URL 指定为输出,请使用 url: 字段。

有关更多信息,请参阅 deploy-pages 操作。

...

jobs:
  deploy:
    permissions:
      contents: read
      pages: write
      id-token: write
    runs-on: ubuntu-latest
    needs: jekyll-build
    environment:
      name: github-pages
      url: ${{steps.deployment.outputs.page_url}}
    steps:
      - name: Deploy artifact
        id: deployment
        uses: actions/deploy-pages@v1
...

链接独立的构建和部署作业

您可以在单个工作流文件中链接 builddeploy 作业,从而无需创建两个单独的文件来获得相同的结果。要开始使用工作流文件,您可以在 jobs 下定义一个 builddeploy 作业来执行您的作业。

...

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v3
      - name: Build with Jekyll
        uses: actions/jekyll-build-pages@v1
        with:
          source: ./
          destination: ./_site
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v2

  # Deployment job
  deploy:
    environment:
      name: github-pages
      url: ${{steps.deployment.outputs.page_url}}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2
...

在某些情况下,你可以选择将所有内容合并到一个作业中,尤其是在不需要构建流程时。因此,你只需专注于部署步骤。

...

jobs:
  # Single deploy job no building
  deploy:
    environment:
      name: github-pages
      url: ${{steps.deployment.outputs.page_url}}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Pages
        uses: actions/configure-pages@v3
      - name: Upload Artifact
        uses: actions/upload-pages-artifact@v2
        with:
          # upload entire directory
          path: '.'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2

...

你可以定义你的作业在不同的运行程序上按顺序或并行运行。有关更多信息,请参阅“使用作业”。