GitHub intégration Google Cloud Build ne détecte pas un cloudbuild.yaml
ou Dockerfile
s'il ne se trouve pas à la racine du référentiel.
Lorsque vous utilisez un monorepo contenant plusieurs cloudbuild.yamls
, comment configurer l'intégration de Google Cloud Build de GitHub pour détecter le bon cloudbuild.yaml
?
Chemins de fichiers:
services/api/cloudbuild.yaml
services/nginx/cloudbuild.yaml
services/websocket/cloudbuild.yaml
Sortie d'intégration de Cloud Build:
Vous pouvez le faire en ajoutant un cloudbuild.yaml
À la racine de votre référentiel en une seule étape gcr.io/cloud-builders/gcloud
. Cette étape devrait:
find
pour localiser des fichiers cloudbuild.yaml
Supplémentaires.cloudbuild.yaml
Trouvé, fourchez et soumettez un build en exécutant gcloud builds submit
.gcloud
fourchues se terminent.Il existe un bon exemple d'une façon de le faire dans la racine cloudbuild.yaml
dans le référentiel GoogleCloudPlatform/cloud-builders-community
.
Si nous supprimons les parties non essentielles, vous avez essentiellement quelque chose comme ceci:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
for d in */; do
config="${d}cloudbuild.yaml"
if [[ ! -f "${config}" ]]; then
continue
fi
echo "Building $d ... "
(
gcloud builds submit $d --config=${config}
) &
done
wait
Nous migrons vers un mono-repo en ce moment, et je n'ai trouvé aucune solution CI/CD qui gère bien cela.
La clé est non seulement de détecter les changements, mais également tous les services qui dépendent de ces changements. Voici ce que nous faisons:
make build
sur tout service affecté par la modification.Jusqu'à présent, cela fonctionne bien, mais je comprends parfaitement si cela ne correspond pas à votre flux de travail.
Une autre option que beaucoup de gens utilisent est Bazel. Ce n'est pas l'outil le plus simple, mais surtout génial si vous avez de nombreux langages différents ou si vous créez des processus sur votre repo mono.