如何将 GitHub Actions 与多个存储库一起使用并部署到 GitHub Pages?

Posted

技术标签:

【中文标题】如何将 GitHub Actions 与多个存储库一起使用并部署到 GitHub Pages?【英文标题】:How to use GitHub Actions with multiple repositories and deploy to GitHub Pages? 【发布时间】:2020-06-02 00:40:57 【问题描述】:

有没有办法设置 Github Actions 来运行多个 npm run builds?我想使用多个存储库并将它们设置为主站点上的不同网页。

假设我有 3 个 repos:Main、Angular App 和 React App。

主存储库将包含我的登陆站点。 Angular App 和 React App 将是两个不同的站点。

foobar.github.io(主仓库),我会去foobar.github.io/angular 导航到我的Angular 应用程序。 foobar.github.io/react 将是一个反应应用程序。

每个应用程序将位于 3 个不同的存储库中。有没有办法让我推送到我的 Angular 应用程序,GitHub Actions 会自动执行ng build --prod --base-href='angular',并更新该页面甚至为所有存储库运行构建并部署它?

要在本地执行此操作,我必须在每个存储库上执行构建命令,然后将每个 prod 文件夹拖到我的存储库中,然后将其向上推,在我看来,这会变得非常低效。

【问题讨论】:

【参考方案1】:

执行此操作的最简单方法是向每个存储库添加一个工作流,以更新 Pages 中的相应区域。 IE。在“主要”回购中,它看起来像:

on: push

jobs:
  main:
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Build
        run: TODO

      - name: Publish
        run: TODO 

在其他存储库中,您会有类似的东西。例如在 Angular 存储库中:

on: push

jobs:      
  angular:
    steps:
      - name: Checkout App
        uses: actions/checkout@v2

      - name: Build Angular
        run: |
          npm ci
          npm run build
          ng build --prod --base-href='angular'

      - name: Publish
        run: TODO

如果您只想在更新 Main 时发布,您可以在 Main 存储库中有一个工作流来构建和发布所有三个,例如:

on: push

jobs:
  main:
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          repository: my-org/main
          path: main

      - name: Build
        run: TODO
        working-directory: ./main

      - name: Publish
        run: TODO
        working-directory: ./main

  react:
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          repository: my-org/react
          path: react

      - name: Build React
        run: TODO
        working-directory: ./react

      - name: Publish
        run: TODO
        working-directory: ./react

  angular:
    steps:
      - name: Checkout App
        uses: actions/checkout@v2
        with:
          repository: my-org/angular
          path: angular

      - name: Build Angular
        run: |
          npm ci
          npm run build
          ng build --prod --base-href='angular', 
        working-directory: ./angular

      - name: Publish
        run: TODO
        working-directory: ./angular

【讨论】:

不要认为这适用于具有单独的 API 存储库和单独的 UI 存储库的项目。我该怎么做?

以上是关于如何将 GitHub Actions 与多个存储库一起使用并部署到 GitHub Pages?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?

在 GitHub Actions 工作流程中未使用语义发布-monorepo 找到存储库

如何配置 GitHub Actions 以构建依赖于私有存储库的 Azure 静态 Web 应用程序?

GitHub Actions - 将公共回购克隆到我的私人回购?

使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块

Github Actions Build - 在多个文件夹上推送到 ECR