我开始使用 gitlab CI/CD 管道,但是如果我有一个项目(Repo)并且在这个项目中我的前端和后端被项目结构分开,那么我对构建过程的输出有一些疑问,例如:
汽车计划
.gitlab-ci.yml
|__前端汽车项目
|__后端汽车项目
假设每次我在前端更改某些内容时,我都需要构建它并将其部署到 S3,但无需构建后端(java 应用程序)并将其部署到弹性 beanstalk(反之亦然,当我更改时)后端)..有没有办法使用 GitLab 检查更改的位置(FrontEndCarProject/BackendCarProject),并根据是否必须部署到 S3 或弹性 beanstalk 将 .gitlab-ci.yml 重定向到脚本文件?
试试看
注意:另一种方法是根据我要部署的位置手动更改 yml 文件。但是有没有办法自动检测并自动化?
.gitlab-ci.yml
只是为了得到这个想法,这是一个将以线性方式运行的示例,但是我如何有条件地构建/部署(取决于我的前端或后端)?为了简单起见,我应该将它们保存在不同的存储库中吗?这是一个好习惯吗?
variables:
ARTIFACT_NAME: cars-api-v$CI_PIPELINE_IID.jar
APP_NAME: cars-api
stages:
- build
- deploy
# ONLY Build when front(FrontendCarProject) in changed
build_front:
stage: build
image: Node:latest
script:
- npm install
artifacts:
paths:
- ./dist
# ONLY build when backend(BackendCarProject) is changed
build_back:
stage: build
image: openjdk:12-alpine
script:
- ./gradlew build
artifacts:
paths:
- ./build/libs/
# ONLY deploy when front(FrontendCarProject) in changed
deploy_s3:
stage: deploy
image:
name: python:latest
script:
- aws configure set region us-east-1
- aws s3 cp ./build/libs/cars-api.jar s3://$S3_BUCKET/cars-api.jar
# ONLY deploy when backend(BackendCarProject) is changed
deploy_back_end:
stage: deploy
image:
name: banst/awscli
script:
- aws configure set region us-east-1
- aws s3 cp ./build/libs/$ARTIFACT_NAME s3://$S3_BUCKET/$ARTIFACT_NAME
- aws elasticbeanstalk create-application-version --application-name $APP_NAME --version-label $CI_PIPELINE_IID --source-bundle S3Bucket=$S3_BUCKET,S3Key=$ARTIFACT_NAME
- aws elasticbeanstalk update-environment --application-name $APP_NAME --environment-name "production" --version-label=$CI_PIPELINE_IID