繁体   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