运行Azure Devops YML文件时,锚点当前不支持

时间:2019-11-29 06:05:57

标签: azure-devops yaml circleci

我有一个CircleCI配置的config.yml文件来构建和部署代码,我希望该config.yml文件在Azure DevOps管道中运行,但出现以下错误。请帮助修复以下脚本,其中我是否需要更改才能在Azure DevOps中运行?我是YAML配置的新手,并且是Azure DevOps的新手,所以请帮助我。

错误:

enter image description here

config.yml:

#
# Required variables
#
# Production:
#  - GCLOUD_SERVICE_KEY_PRODUCTION
#  - GCLOUD_PROJECT_ID_PRODUCTION
#  - GCLOUD_PROJECT_CLUSTER_ID_PRODUCTION
#  - GCLOUD_PROJECT_CLUSTER_ZONE_PRODUCTION
#
# Staging:
#  - GCLOUD_SERVICE_KEY_STAGING
#  - GCLOUD_PROJECT_ID_STAGING
#  - GCLOUD_PROJECT_CLUSTER_ID_STAGING
#  - GCLOUD_PROJECT_CLUSTER_ZONE_STAGING
#

gcp_runtime: &gcp_runtime
  docker:
    - image: boiyaa/google-cloud-sdk-nodejs

setup-production_credentials: &setup-production_credentials
  run:
    name: Setup credentials to act on behalf of circle service account
    command: |
      echo ${GCLOUD_SERVICE_KEY_PRODUCTION} > ${HOME}/gcp-key.json
      gcloud auth activate-service-account --key-file ${HOME}/gcp-key.json
      gcloud container clusters get-credentials ${GCLOUD_PROJECT_CLUSTER_ID_PRODUCTION} \
        --zone ${GCLOUD_PROJECT_CLUSTER_ZONE_PRODUCTION} \
        --project ${GCLOUD_PROJECT_ID_PRODUCTION}

setup-staging_credentials: &setup-staging_credentials
  run:
    name: Setup credentials to act on behalf of circle service account
    command: |
      echo ${GCLOUD_SERVICE_KEY_STAGING} > ${HOME}/gcp-key.json
      gcloud auth activate-service-account --key-file ${HOME}/gcp-key.json
      gcloud container clusters get-credentials ${GCLOUD_PROJECT_CLUSTER_ID_STAGING} \
        --zone ${GCLOUD_PROJECT_CLUSTER_ZONE_STAGING} \
        --project ${GCLOUD_PROJECT_ID_STAGING}

setup-production-env: &setup-production-env
  run:
    name: Setup env for production
    command: |
      rm -f .env
      echo "REACT_APP_API_URL=${REACT_APP_API_URL_PRODUCTION}" >> .env
      echo "REACT_APP_SOCIAL_API_URL=${REACT_APP_SOCIAL_API_URL_PRODUCTION}" >> .env
      echo "REACT_APP_WEB_URL=${REACT_APP_WEB_URL_PRODUCTION}" >> .env
      echo "REACT_APP_AUTH0_DOMAIN=${REACT_APP_AUTH0_DOMAIN_PRODUCTION}" >> .env
      echo "REACT_APP_AUTH0_CLIENT_ID=${REACT_APP_AUTH0_CLIENT_ID_PRODUCTION}" >> .env
      echo "REACT_APP_PUSHER_KEY=${REACT_APP_PUSHER_KEY_PRODUCTION}" >> .env
      echo "REACT_APP_PUSHER_CLUSTER=${REACT_APP_PUSHER_CLUSTER_PRODUCTION}" >> .env
      echo "REACT_APP_VALID_DOMAIN=${REACT_APP_VALID_DOMAIN_PRODUCTION}" >> .env

setup-staging-env: &setup-staging-env
  run:
    name: Setup env for staging
    command: |
      rm -f .env
      echo "REACT_APP_API_URL=${REACT_APP_API_URL_STAGING}" >> .env
      echo "REACT_APP_SOCIAL_API_URL=${REACT_APP_SOCIAL_API_URL_STAGING}" >> .env
      echo "REACT_APP_WEB_URL=${REACT_APP_WEB_URL_STAGING}" >> .env
      echo "REACT_APP_AUTH0_DOMAIN=${REACT_APP_AUTH0_DOMAIN_STAGING}" >> .env
      echo "REACT_APP_AUTH0_CLIENT_ID=${REACT_APP_AUTH0_CLIENT_ID_STAGING}" >> .env
      echo "REACT_APP_PUSHER_KEY=${REACT_APP_PUSHER_KEY_STAGING}" >> .env
      echo "REACT_APP_PUSHER_CLUSTER=${REACT_APP_PUSHER_CLUSTER_STAGING}" >> .env
      echo "REACT_APP_VALID_DOMAIN=${REACT_APP_VALID_DOMAIN_STAGING}" >> .env

build_docker_images: &build_docker_images
  run:
    name: build and cache all docker images first and fail before deploying
    command: |
      true || docker build --build-arg CIRCLE_BUILD_NUM=${CIRCLE_BUILD_NUM:-0} -f ./Dockerfile -t web .

deploy_script_production: &deploy_script_production
  run:
    name: Deploy the application to prod
    command: bash ./deploy/deploy-all.sh prod

deploy_script_staging: &deploy_script_staging
  run:
    name: Deploy the application to staging
    command: bash ./deploy/deploy-all.sh staging

deploy-production: &deploy-production
  steps:
    - checkout
    - setup_remote_docker:
        docker_layer_caching: true
    - *build_docker_images
    - *setup-production-env
    - *setup-production_credentials
    - *deploy_script_production

deploy-staging: &deploy-staging
  steps:
    - checkout
    - setup_remote_docker:
        docker_layer_caching: true
    - *build_docker_images
    - *setup-staging-env
    - *setup-staging_credentials
    - *deploy_script_staging

version: 2
jobs:
  deploy_to_production:
    <<: *gcp_runtime
    environment:
      ENVIRONMENT: production
      SKIP_BASE: "true"
    <<: *deploy-production

  deploy_to_staging:
    <<: *gcp_runtime
    environment:
      ENVIRONMENT: staging
      SKIP_BASE: "true"
    <<: *deploy-staging

workflows:
  version: 2
  deploy_to_production:
    jobs:
      - deploy_to_production:
          filters:
            branches:
              only: production

  deploy_to_staging:
    jobs:
      - deploy_to_staging:
          filters:
            branches:
              only: staging

1 个答案:

答案 0 :(得分:0)

Azure DevOps documentation中所述:

  

注意:Azure Pipelines不支持YAML的所有功能,例如锚点,复杂键和集合。

这意味着您需要删除YAML文件中的所有锚点(和别名)。此外,您不能期望CircleCI配置是有效的Azure DevOps配置。它们是不同的工具,并且具有不同的配置结构。

您应该先阅读Azure DevOps文档,然后相应地重写文件。这不是对该文件的琐碎修改。