簡體   English   中英

使用 github 操作從 monorepo 部署單個服務

[英]Deploy individual services from a monorepo using github actions

我有大約 10 個獨立的微服務,其中大部分是用於各種數據處理作業的雲功能,它們都位於一個 github 存儲庫中。

目標是在推送到分支時觸發將這些服務選擇性部署到 Google Cloud Functions - 當單個功能已更新時。

我必須避免單個服務的更新導致所有雲功能的部署的情況。

我當前的存儲庫結構:

/repo
--/service_A
----/function
----/notebook
--/service_B
----/function
----/notebook

另外,使用 Github Actions VS Google Cloud Build 進行此類自動化的優缺點是什么?

GitHub Actions 支持具有工作流路徑過濾的 monorepos。 您可以創建一個工作流,以便在特定路徑上的文件發生更改時選擇性地觸發。

https://help.github.com/en/articles/workflow-syntax-for-github-actions#onpushpull_requestpaths

例如,當路徑service_A/下的任何文件發生更改時,此工作流將在推送時觸發(注意** glob 以匹配嵌套目錄中的文件)。

on:
  push:
    paths:
      - 'service_A/**'

您還可以運行一些腳本來發現基於git diff更改了哪些服務,並通過GitHub REST ZDB974ZA738718CA8DE1463觸發相應的作業

可能有兩個工作流main.ymlservices.yml

主工作流將配置為始終在推送時啟動,並且它只會啟動腳本以找出更改了哪些服務。 對於每個更改的服務存儲庫調度事件,將使用有效負載中的服務名稱觸發。

服務工作流將配置為在repository_dispatch上啟動,並且每個服務都包含一個作業。 作業將具有基於事件有效負載的附加條件。

查看具有類似設置的展示: https://github.com/zladovan/monorepo

已更改路徑操作可能值得一試:

name: Conditional Deploy

on: push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 100

      - uses: marceloprado/has-changed-path@v1
        id: service_A_deployment
        with:
          paths: service_A

      - name: Deploy front
        if: steps.service_A_deployment.outputs.changed == 'true'
        run: /deploy-service_A.sh

答案是你切換到使用 NX.dev 並讓它為你解決它的nx affected deploy命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM