问题描述
我想使变量可用于所有Node部署作业,以使Gitlab管道干燥,但我还想提供依赖于每个单独作业的其他变量。当我处理需要唯一环境变量的多个Node服务时,这将有所帮助。
在阅读文档时,似乎可以通过两种方式在.gitlab-ci.yml
文件中执行此操作:
方法#1
在YAML锚定定义中包括全局变量,希望它将与特定于工作的var合并:
# anchor: global Node image deployment job
.deploy_node_image: &deploy_node_image
image: docker:latest
stage: deploy
services:
- docker:dind
variables: # global variables
REGION: "region"
ACCOUNT_ID: "id"
CLUSTER_NAME: "cluster"
script:
- apk add py-pip
- pip install awscli
- echo $CLUSTER_NAME $REGION $IMAGE_NAME $ACCOUNT_ID $SERVICE_NAME $SERVICE_DIR
- aws ecr get-login-password --region $REGION | docker login --username AWS
--password-stdin https://$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
- cd $CI_PROJECT_DIR/ingenio/new-backend/$SERVICE_DIR
- docker build
-t $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:latest .
- docker push
$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:latest
- aws ecs update-service
--region $REGION
--cluster $CLUSTER_NAME
--service $SERVICE_NAME
# specific job
deploy:users-service:
<<: *deploy_node_image
variables:
IMAGE_NAME: "users-api"
SERVICE_NAME: "serviceName"
SERVICE_DIR: "/endpoint"
方法#2
定义一组全局变量并将其与作业特定的变量合并:
node_variables: &node_globals
variables:
REGION: "region"
ACCOUNT_ID: "id"
CLUSTER_NAME: "cluster"
# anchor: global Node image deployment job
.deploy_node_image: &deploy_node_image
image: docker:latest
stage: deploy
services:
- docker:dind
script:
- apk add py-pip
- pip install awscli
- echo $CLUSTER_NAME $REGION $IMAGE_NAME $ACCOUNT_ID $SERVICE_NAME $SERVICE_DIR
- aws ecr get-login-password --region $REGION | docker login --username AWS
--password-stdin https://$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
- cd $CI_PROJECT_DIR/ingenio/new-backend/$SERVICE_DIR
- docker build
-t $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:latest .
- docker push
$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:latest
- aws ecs update-service
--region $REGION
--cluster $CLUSTER_NAME
--service $SERVICE_NAME
# specific job
deploy:users-service:
<<: *deploy_node_image
variables:
<<: *node_globals
IMAGE_NAME: "users-api"
SERVICE_NAME: "serviceName"
SERVICE_DIR: "/endpoint"
两者均无效,并且第一个AWS ECR命令失败,因为$REGION
为null,以及方法1中的log语句中方法1的节点锚点和方法2中的全局变量包括的所有变量。节点锚点。在日志中只能看到实际作业中包含的var,这让我认为它只是覆盖。
那我怎么合并它们?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)