目前运行azure devops YML文件时不支持锚点

问题描述 投票:0回答:1

我有一个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
azure-devops yaml circleci
1个回答
0
投票

Azure DevOps documentation中所述:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.