Gitlab CI / CD:锚定/全局变量中的变量对Runner不可用

问题描述

我想使变量可用于所有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 (将#修改为@)