1
votes

I have a CircleCI Configured config.yml file to build and deploy the code and I wanted that config.yml file to be run in Azure DevOps pipeline but I am getting the error as below.Kindly help in fixing my below script where should I need to change to run in Azure DevOps? I am new to the YAML configuration and new in Azure DevOps,so Kindly help me in this matter.

Error:

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
Yes, just like flyx pointed out, Azure Pipelines doesn't support anchors in YAML at this moment.Leo Liu-MSFT
I couldn't able to run the above CircleCI script in Azure DevOps .Could any one of you please help me to convert the above script to Azure DevOps please?PDBR

1 Answers

1
votes

As stated in the Azure DevOps documentation:

Note: Azure Pipelines doesn't support all features of YAML, such as anchors, complex keys, and sets.

This means that you need to do away with all anchors (and aliases) in your YAML file. Moreover, you cannot expect a CircleCI configuration to be a valid Azure DevOps configuration. They are different tools and have a different configuration structure.

You should start by reading the Azure DevOps docs and then rewrite your file accordingly. This is not a trivial modification of the file.