【问题标题】:How to use GitHub Actions with multiple repositories and deploy to GitHub Pages?如何将 GitHub Actions 与多个存储库一起使用并部署到 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 文件夹拖到我的存储库中,然后将其向上推,在我看来,这会变得非常低效。

【问题讨论】:

    标签: github github-pages github-actions


    【解决方案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 存储库的项目。我该怎么做?
    最近更新 更多