Skip to content

Azure Pipelines

To implement automated migration using Azure DevOps, follow these steps:

Configure Pipeline Definition

Create or update ado-pipeline.yml with the following settings:

  • Trigger on main branch changes
  • Optional profile parameter support
  • Environment configuration via env.json

Setup Pipeline Steps

  1. Environment Setup
  • Install Node.js
  • Run npm ci to install dependencies
  1. Data Generation
  • Execute generate script
  • Use specified profile (if provided)
  1. Migration Execution
  • Run migrate script
  • Apply profile settings as configured

TIP

The pipeline can run with or without a specified profile, providing flexibility for different deployment scenarios.

Sample Pipeline Definition

Place the below in a ado-pipeline.yml file.

yaml
trigger: none

variables:
  devCredentials: "dev"
  preprodCredentials: "preprod"
  prodCredentials: "prod"
  devRegion: "us-east-1"
  preprodRegion: "us-east-1"
  prodRegion: "us-east-1"
  devInstanceArn: "arn:aws:connect:us-east-1:851725609954:instance/ec4fc4db-091f-4681-a822-faef743247c6"
  preprodInstanceArn: "arn:aws:connect:us-east-1:381492093169:instance/893c4767-9162-4345-ab26-20f8c8f78657"
  prodInstanceArn: "arn:aws:connect:us-east-1:851725609954:instance/ec4fc4db-091f-4681-a822-faef743247c6"

stages:
  # Development to Pre-Production stage
  - stage: DevToPreProd
    displayName: "Deploy from Development to Pre-Production"
    jobs:
      - deployment: DeployDevToPreProd
        displayName: "Deploy from Dev to PreProd Environment"
        environment: "PreProd"
        pool:
          vmImage: "ubuntu-latest"
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
                - task: AWSShellScript@1
                  name: setDevOutputVariables
                  inputs:
                    awsCredentials: "$(devCredentials)"
                    regionName: $(devRegion)
                    scriptType: inline
                    inlineScript: |
                      echo "##vso[task.setvariable variable=SOURCE_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
                      echo "##vso[task.setvariable variable=SOURCE_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
                      echo "##vso[task.setvariable variable=SOURCE_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
                - task: AWSShellScript@1
                  name: setPreprodOutputVariables
                  inputs:
                    awsCredentials: "$(preprodCredentials)"
                    regionName: $(preprodRegion)
                    scriptType: inline
                    inlineScript: |
                      echo "##vso[task.setvariable variable=DEST_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
                      echo "##vso[task.setvariable variable=DEST_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
                      echo "##vso[task.setvariable variable=DEST_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
                - task: NodeTool@0
                  inputs:
                    versionSpec: "20.11.1"
                  displayName: "Install Node.js"

                - script: |
                    npm ci
                  displayName: "Install dependencies"
                  workingDirectory: "deployments/migration-tool"
                - script: |
                    echo "Running data generation"
                    npm run generate
                    echo 'Now running migration script'
                    npm run migrate
                  workingDirectory: "deployments/migration-tool"
                  env:
                    SOURCE_AWS_ACCESS_KEY_ID: $(setDevOutputVariables.SOURCE_AWS_ACCESS_KEY_ID)
                    SOURCE_AWS_SECRET_ACCESS_KEY: $(setDevOutputVariables.SOURCE_AWS_SECRET_ACCESS_KEY)
                    SOURCE_AWS_SESSION_TOKEN: $(setDevOutputVariables.SOURCE_AWS_SESSION_TOKEN)
                    SOURCE_INSTANCE_ARN: "$(devInstanceArn)"
                    SOURCE_AWS_REGION: "$(devRegion)"
                    DEST_AWS_ACCESS_KEY_ID: $(setPreprodOutputVariables.DEST_AWS_ACCESS_KEY_ID)
                    DEST_AWS_SECRET_ACCESS_KEY: $(setPreprodOutputVariables.DEST_AWS_SECRET_ACCESS_KEY)
                    DEST_AWS_SESSION_TOKEN: $(setPreprodOutputVariables.DEST_AWS_SESSION_TOKEN)
                    DEST_INSTANCE_ARN: "$(preprodInstanceArn)"
                    DEST_AWS_REGION: "$(preprodRegion)"
                  displayName: "Generate & Migrate"

  # Pre-Production to Production stage
  - stage: PreProdToProd
    displayName: "Deploy from Pre-Production to Production"
    dependsOn: DevToPreProd
    jobs:
      - deployment: DeployPreProdToProd
        displayName: "Deploy from PreProd to Prod Environment"
        environment: "Prod"
        pool:
          vmImage: "ubuntu-latest"
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
                - task: AWSShellScript@1
                  name: setPreprodOutputVariables
                  inputs:
                    awsCredentials: "$(preprodCredentials)"
                    regionName: $(devRegion)
                    scriptType: inline
                    inlineScript: |
                      echo "##vso[task.setvariable variable=SOURCE_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
                      echo "##vso[task.setvariable variable=SOURCE_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
                      echo "##vso[task.setvariable variable=SOURCE_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
                - task: AWSShellScript@1
                  name: setProdOutputVariables
                  inputs:
                    awsCredentials: "$(prodCredentials)"
                    regionName: $(preprodRegion)
                    scriptType: inline
                    inlineScript: |
                      echo "##vso[task.setvariable variable=DEST_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
                      echo "##vso[task.setvariable variable=DEST_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
                      echo "##vso[task.setvariable variable=DEST_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
                - task: NodeTool@0
                  inputs:
                    versionSpec: "20.11.1"
                  displayName: "Install Node.js"

                - script: |
                    npm ci
                  displayName: "Install dependencies"
                  workingDirectory: "deployments/migration-tool"
                - script: |
                    echo "Running data generation"
                    npm run generate
                    echo 'Now running migration script'
                    npm run migrate
                  workingDirectory: "deployments/migration-tool"
                  env:
                    SOURCE_AWS_ACCESS_KEY_ID: $(setPreprodOutputVariables.SOURCE_AWS_ACCESS_KEY_ID)
                    SOURCE_AWS_SECRET_ACCESS_KEY: $(setPreprodOutputVariables.SOURCE_AWS_SECRET_ACCESS_KEY)
                    SOURCE_AWS_SESSION_TOKEN: $(setPreprodOutputVariables.SOURCE_AWS_SESSION_TOKEN)
                    SOURCE_INSTANCE_ARN: "$(preprodInstanceArn)"
                    SOURCE_AWS_REGION: "$(preprodRegion)"
                    DEST_AWS_ACCESS_KEY_ID: $(setProdOutputVariables.DEST_AWS_ACCESS_KEY_ID)
                    DEST_AWS_SECRET_ACCESS_KEY: $(setProdOutputVariables.DEST_AWS_SECRET_ACCESS_KEY)
                    DEST_AWS_SESSION_TOKEN: $(setProdOutputVariables.DEST_AWS_SESSION_TOKEN)
                    DEST_INSTANCE_ARN: "$(prodInstanceArn)"
                    DEST_AWS_REGION: "$(prodRegion)"
                  displayName: "Generate & Migrate"