Deploy individual services from a monorepo using github actions

微笑、不失礼 提交于 2020-06-27 08:37:22

问题


I have around 10 individual micro-services which are mostly cloud functions for various data processing jobs, which all live in a single github repository.

The goal is to trigger the selective deployment of these service to Google Cloud Functions, on push to a branch - when an individual function has been updated.

I must avoid the situation in which update of a single service causes the deployment of all the cloud functions.

My current repository structure:

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

On a side note, what are the pros/cons of using Github Actions VS Google Cloud Build for such automation?


回答1:


GitHub Actions supports monorepos with path filtering for workflows. You can create a workflow to selectively trigger when files on a specific path change.

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

For example, this workflow will trigger on a push when any files under the path service_A/ have changed.

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



回答2:


You could also run some script to discover which services were changed based on git diff and trigger corresponding job via GitHub REST API.

There could be two workflows main.yml and services.yml.

Main workflow will be configured to be started always on push and it will only start script to find out which services were changed. For each changed service repository dispatch event will be triggered with service name in payload.

Services workflow will be configured to be started on repository_dispatch and it will contain one job for each service. Jobs would have additional condition based on event payload.

See showcase with similar setup: https://github.com/zladovan/monorepo



来源:https://stackoverflow.com/questions/58136102/deploy-individual-services-from-a-monorepo-using-github-actions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!