![](/img/trans.png)
[英]Deploy code directly to AWS EC2 instance using Github Actions
[英]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.yml
和services.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.