Gitlab 运行 管道作业仅当上一个作业 运行
Gitlab run pipeline job only when previous job ran
我正在尝试创建一个包含生产和开发部署的管道。在这两种环境中,应使用 docker 构建应用程序。但只有当相应目录中的某些内容发生更改时。
例如:
- 当前端目录发生变化时,应该构建和部署前端
- 当后端目录发生变化时,应该构建和部署后端
起初我没有needs:
关键字。管道始终执行 deploy_backend 和 deploy_frontend,即使未执行构建作业也是如此。
现在我添加了 needs:
关键字,但是 Gitlab 在只有一个目录发生变化时说 yaml invalid
。当两个目录都发生变化时,管道工作正常。例如,当 2 个目录外的 README.md 发生变化时,也会显示 yaml invalid
。
有谁知道我如何创建一个仅在指定目录发生更改时才运行的管道,并且仅在构建作业具有 运行 时才运行相应的部署作业?
gitlab-ci.yml:
stages:
- build
- deploy
build_frontend:
stage: build
only:
refs:
- master
- development
changes:
- frontend/*
script:
- cd frontend
- docker build -t frontend .
build_backend:
stage: build
only:
refs:
- master
- development
changes:
- backend/*
script:
- cd backend
- docker build -t backend .
deploy_frontend_dev:
stage: deploy
only:
refs:
- development
script:
- "echo deploy frontend"
needs: ["build_frontend"]
deploy_backend_dev:
stage: deploy
only:
refs:
- development
- pipeline
script:
- "echo deploy backend"
needs: ["build_backend"]
这里的问题是您的 deploy
作业需要之前的 build
作业实际存在。
但是,通过使用 only.changes
规则,它们仅在这些目录中实际发生更改时才存在。
所以当只有 frontend
- 文件夹中的内容发生变化时,根本不会生成 build_backend
- 作业。但是 deploy_backend_dev
工作仍然存在,然后错过了它的依赖性。
一个快速修复方法是将 only.changes
配置也添加到 deployment-jobs,如下所示:
deploy_frontend_dev:
stage: deploy
only:
refs:
- development
changes:
- frontend/*
script:
- "echo deploy frontend"
needs: ["build_frontend"]
deploy_backend_dev:
stage: deploy
only:
refs:
- development
- pipeline
changes:
- backend/*
script:
- "echo deploy backend"
needs: ["build_backend"]
这样,只有当从属 build
作业也创建时才会创建这两个作业,并且 yaml 不会无效。
我正在尝试创建一个包含生产和开发部署的管道。在这两种环境中,应使用 docker 构建应用程序。但只有当相应目录中的某些内容发生更改时。
例如:
- 当前端目录发生变化时,应该构建和部署前端
- 当后端目录发生变化时,应该构建和部署后端
起初我没有needs:
关键字。管道始终执行 deploy_backend 和 deploy_frontend,即使未执行构建作业也是如此。
现在我添加了 needs:
关键字,但是 Gitlab 在只有一个目录发生变化时说 yaml invalid
。当两个目录都发生变化时,管道工作正常。例如,当 2 个目录外的 README.md 发生变化时,也会显示 yaml invalid
。
有谁知道我如何创建一个仅在指定目录发生更改时才运行的管道,并且仅在构建作业具有 运行 时才运行相应的部署作业?
gitlab-ci.yml:
stages:
- build
- deploy
build_frontend:
stage: build
only:
refs:
- master
- development
changes:
- frontend/*
script:
- cd frontend
- docker build -t frontend .
build_backend:
stage: build
only:
refs:
- master
- development
changes:
- backend/*
script:
- cd backend
- docker build -t backend .
deploy_frontend_dev:
stage: deploy
only:
refs:
- development
script:
- "echo deploy frontend"
needs: ["build_frontend"]
deploy_backend_dev:
stage: deploy
only:
refs:
- development
- pipeline
script:
- "echo deploy backend"
needs: ["build_backend"]
这里的问题是您的 deploy
作业需要之前的 build
作业实际存在。
但是,通过使用 only.changes
规则,它们仅在这些目录中实际发生更改时才存在。
所以当只有 frontend
- 文件夹中的内容发生变化时,根本不会生成 build_backend
- 作业。但是 deploy_backend_dev
工作仍然存在,然后错过了它的依赖性。
一个快速修复方法是将 only.changes
配置也添加到 deployment-jobs,如下所示:
deploy_frontend_dev:
stage: deploy
only:
refs:
- development
changes:
- frontend/*
script:
- "echo deploy frontend"
needs: ["build_frontend"]
deploy_backend_dev:
stage: deploy
only:
refs:
- development
- pipeline
changes:
- backend/*
script:
- "echo deploy backend"
needs: ["build_backend"]
这样,只有当从属 build
作业也创建时才会创建这两个作业,并且 yaml 不会无效。