POWER OF DEVOPS CLI AND REST API

Greetings my fellow Technology Advocates and Specialists.

In this Article, I will demonstrate how to Create and Setup Azure DevOps Project with Best Practices using DEVOPS CLI, REST API and DEVOPS PIPELINE

WHAT DOES THE PIPELINE DO:-

#
PI…


This content originally appeared on DEV Community and was authored by Arindam Mitra

Greetings my fellow Technology Advocates and Specialists.

In this Article, I will demonstrate how to Create and Setup Azure DevOps Project with Best Practices using DEVOPS CLI, REST API and DEVOPS PIPELINE

WHAT DOES THE PIPELINE DO:-
# PIPELINE TASKS
1. INSTALL AZURE DEVOPS CLI EXTENSION
2. EXECUTING HELP OPTION OF AZURE DEVOPS CLI
3. DISPLAY PAT (PERSONAL ACCESS TOKEN)
4. CREATE AZURE DEVOPS PROJECT
5. SET DEFAULTS AZURE DEVOPS ORGANISATION & PROJECT
6. CREATE REPOSITORIES
7. INITIALIZE REPOSITORIES
8. CREATE PIPELINE FOLDERS
9. CREATE PIPELINE ENVIRONMENT
10. CREATE AGENT POOL
11. CREATE POLICY - MINIMUM NUMBER OF REVIEWERS
12. CREATE POLICY - CHECK FOR LINKED WORK ITEMS
13. CREATE POLICY - CHECK FOR COMMENT RESOLUTION
14. CREATE POLICY - LIMIT MERGE TYPES
15. CREATE POLICY - CODE REVIEWERS
Below follows the contents of the YAML File (Azure DevOps):-
trigger:
  none

######################
#DECLARE PARAMETERS:-
######################
parameters:
- name: PAT
  type: object
  default: <Please Provide the PAT Value Here>

- name: DevOpsOrganisation
  type: object
  default: https://dev.azure.com/ArindamMitra0251

- name: DevOpsProjName
  type: object
  default: AM001

- name: DevOpsProjDescription
  type: object
  default: Test Project

######################
#DECLARE VARIABLES:-
######################
variables:
  DevOpsEnv: DEV
  DevOpsPool: AMPool001
  DevOpsGITUser: AM
  DevOpsGITEmail: arindam0310018@gmail.com
  DevOpsOrganisationWithoutHTTPS: dev.azure.com/ArindamMitra0251
  DevOpsPipelineInfraFoldername: Infrastructure
  DevOpsPipelineAppFoldername: Application
  DevOpsReqReviewer1: arindam.mitra@test.onmicrosoft.com

######################
#DECLARE BUILD AGENT:-
######################
pool:
  vmImage: 'ubuntu-latest'

###################
#DECLARE STAGES:-
###################
stages:

- stage: AZ_DEVOPS_PROJECT
  jobs:
  - job: SETUP_DEVOPS_PROJECT
    displayName: SETUP DEVOPS PROJECT
    steps:

########################################################
# Install Az DevOps CLI Extension in the Build Agent:-
#######################################################
    - task: AzureCLI@1
      displayName: INSTALL DEVOPS CLI EXTENSION
      inputs:
        azureSubscription: 'amcloud-cicd-service-connection'
        scriptType: ps
        scriptLocation: inlineScript
        inlineScript: |
          az extension add --name azure-devops
          az extension show --name azure-devops --output table

###############################################################
# Help Option of Az DevOps CLI Extension in the Build Agent:-
###############################################################
    - task: PowerShell@2
      displayName: HELP OPTION OF AZ DEVOPS CLI
      inputs:
        targetType: 'inline'
        script: |
          az devops -h

###################################################################
# Display Az DevOps PAT in the Build Agent:-
##################################################################
    - task: CmdLine@2
      displayName: DISPLAY PAT
      inputs:
        script: |
         echo "PAT TOKEN IS: ${{ parameters.PAT }}"

#########################################################################
# Create DevOps Project:-
# Azure DevOps organization URL required if not configured as default.
# source-control - "git" is default
# visibility - "private" is default
#########################################################################
    - task: PowerShell@2
      displayName: CREATE DEVOPS PROJECT
      inputs:
        targetType: 'inline'
        script: |
         echo "${{ parameters.PAT }}" | az devops login  
         az devops project create --name ${{ parameters.DevOpsProjName }} --description "${{ parameters.DevOpsProjDescription }}" --org ${{ parameters.DevOpsOrganisation }} --process Agile --output table

##################################################
# Set Default DevOps Organization and Project:-
##################################################
    - task: PowerShell@2
      displayName: SET DEFAULTS DEVOPS ORG & PROJECT
      inputs:
        targetType: 'inline'
        script: |
         az devops configure --defaults organization=${{ parameters.DevOpsOrganisation }} project=${{ parameters.DevOpsProjName }}

##########################
# Create Repositories:-
#########################
    - task: PowerShell@2
      displayName: CREATE REPOSITORIES 
      inputs:
        targetType: 'inline'
        script: |
         az repos create --name "${{ parameters.DevOpsProjName }}-INFRASTRUCTURE" -p ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --output table
         az repos create --name "${{ parameters.DevOpsProjName }}-APPLICATION" -p ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --output table

##############################
# Initialize Repositories:-
#############################
    - task: PowerShell@2
      displayName: INITIALIZE REPOSITORIES 
      inputs:
        targetType: 'inline'
        script: |
         mkdir ${{ parameters.DevOpsProjName }}
         mkdir ${{ parameters.DevOpsProjName }}-APPLICATION

         git config --global user.email "$(DevOpsGITEmail)"
         git config --global user.name "$(DevOpsGITUser)"
         git config --global init.defaultBranch main
         git config --global --unset https.proxy

         cd ${{ parameters.DevOpsProjName }}
         git init
         "REPO NAME: ${{ parameters.DevOpsProjName }}" > README.md
         git add .
         git commit -m "Initial commit"
         git remote add origin (az repos list --project "${{ parameters.DevOpsProjName }}" --org ${{ parameters.DevOpsOrganisation }} --query [1].webUrl)
         git push https://$(DevOpsGITUser):${{ parameters.PAT }}@$(DevOpsOrganisationWithoutHTTPS)/${{ parameters.DevOpsProjName }}/_git/${{ parameters.DevOpsProjName }}

         mkdir ${{ parameters.DevOpsProjName }}-INFRASTRUCTURE
         cd ${{ parameters.DevOpsProjName }}-INFRASTRUCTURE
         git init
         "REPO NAME: ${{ parameters.DevOpsProjName }}-INFRASTRUCTURE" > README.md
         git add .
         git commit -m "Initial commit"
         git remote add origin (az repos list --project "${{ parameters.DevOpsProjName }}" --org ${{ parameters.DevOpsOrganisation }} --query [2].webUrl)
         git push https://$(DevOpsGITUser):${{ parameters.PAT }}@$(DevOpsOrganisationWithoutHTTPS)/${{ parameters.DevOpsProjName }}/_git/${{ parameters.DevOpsProjName }}-INFRASTRUCTURE


         mkdir ${{ parameters.DevOpsProjName }}-APPLICATION
         cd ${{ parameters.DevOpsProjName }}-APPLICATION
         git init
         "REPO NAME: ${{ parameters.DevOpsProjName }}-APPLICATION" > README.md
         git add .
         git commit -m "Initial commit"
         git remote add origin (az repos list --project "${{ parameters.DevOpsProjName }}" --org ${{ parameters.DevOpsOrganisation }} --query [2].webUrl)
         git push https://$(DevOpsGITUser):${{ parameters.PAT }}@$(DevOpsOrganisationWithoutHTTPS)/${{ parameters.DevOpsProjName }}/_git/${{ parameters.DevOpsProjName }}-APPLICATION

#############################
# Create Pipeline folders:-
#############################
    - task: PowerShell@2
      displayName: CREATE PIPELINE FOLDERS 
      inputs:
        targetType: 'inline'
        script: |
         az pipelines folder create --path \$(DevOpsPipelineInfraFoldername) --org ${{ parameters.DevOpsOrganisation }} -p ${{ parameters.DevOpsProjName }} --output table
         az pipelines folder create --path \$(DevOpsPipelineAppFoldername) --org ${{ parameters.DevOpsOrganisation }} -p ${{ parameters.DevOpsProjName }} --output table
         az pipelines folder list --org ${{ parameters.DevOpsOrganisation }} -p ${{ parameters.DevOpsProjName }} --output table

#############################################
# Create Environment Using DEVOPS REST API:-
#############################################
    - task: PowerShell@2
      displayName: CREATE PIPELINE ENVIRONMENT 
      inputs:
        targetType: 'inline'
        script: |
         $env = "$(DevOpsEnv)"
         $envJSON = @{
         name = $env
         description = "My $env environment"
          }
         $infile = "envdetails.json"
         Set-Content -Path $infile -Value ($envJSON | ConvertTo-Json)
         az devops invoke --area distributedtask --resource environments --route-parameters project=${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --http-method POST --in-file $infile --api-version "6.0-preview"

#############################################
# Create Agent Pool Using DEVOPS REST API:-
#############################################
    - task: PowerShell@2
      displayName: CREATE AGENT POOL 
      inputs:
        targetType: 'inline'
        script: |
         $pool = "$(DevOpsPool)" 
         $poolJSON = @{
         name = $pool
         description = "My $pool Agent Pool"
          }
         $infile = "pooldetails.json"
         Set-Content -Path $infile -Value ($poolJSON | ConvertTo-Json)
         az devops invoke --area distributedtask --resource pools --route-parameters project=${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --http-method POST --in-file $infile --api-version "6.0"

###################################
# Branch policies and settings:-
###################################

##########################################
# Require a minimum number of reviewers:-
##########################################
    - task: PowerShell@2
      displayName: POLICY - MIN NUMBER OF REVIEWERS 
      inputs:
        targetType: 'inline'
        script: |
         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table

         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table

         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table

################################
# Check for Linked Work Items:-
################################
    - task: PowerShell@2
      displayName: POLICY - CHECK FOR LINKED WORK ITEMS 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --output table
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --output table
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --output table

################################
# Check for Comment Resolution:-
################################
    - task: PowerShell@2
      displayName: POLICY - CHECK FOR COMMENT RESOLUTION 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --output table
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --output table
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --output table

#######################
# Limit merge types:-
#######################
    - task: PowerShell@2
      displayName: POLICY - LIMIT MERGE TYPES 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table

###########################################
# Automatically include code reviewers:-
###########################################
    - task: PowerShell@2
      displayName: POLICY - CODE REVIEWERS 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table

PIPELINE RUNTIME VARIABLES:-
Image description
Personal Access Token (PAT) needs to be provided at Runtime which is then used for DevOps Login to Create DevOps Project
Below follows the code snippet for PIPELINE RUNTIME VARIABLES:-
#####################
#DECLARE PARAMETERS:-
######################
parameters:
- name: PAT
  type: object
  default: <Please Provide the PAT Value Here>

- name: DevOpsOrganisation
  type: object
  default: https://dev.azure.com/ArindamMitra0251

- name: DevOpsProjName
  type: object
  default: AM001

- name: DevOpsProjDescription
  type: object
  default: Test Project
Values of the VARIABLES incase if you wish to change:-
######################
#DECLARE VARIABLES:-
######################
variables:
  DevOpsEnv: DEV
  DevOpsPool: AMPool001
  DevOpsGITUser: AM
  DevOpsGITEmail: arindam0310018@gmail.com
  DevOpsOrganisationWithoutHTTPS: dev.azure.com/ArindamMitra0251
  DevOpsPipelineInfraFoldername: Infrastructure
  DevOpsPipelineAppFoldername: Application
  DevOpsReqReviewer1: arindam.mitra@test.onmicrosoft.com
PIPELINE RESULTS:-
Image description
DEVOPS PROJECT CREATED SUCCESSFULLY:-
Image description
REPOSITORIES CREATED SUCCESSFULLY:-
Image description
REPOSITORIES INITIALISED SUCCESSFULLY:-
REPO NAME = AM001
Image description
REPO NAME = AM001-INFRASTRUCTURE
Image description
REPO NAME = AM001-APPLICATION
Image description
POINTS TO NOTE ON REPOSITORIES INITIALIZATION:-
git config --global user.email "$(DevOpsGITEmail)"
git config --global user.name "$(DevOpsGITUser)"
git config --global init.defaultBranch main
If above not added, below ERROR was encountered:-
Image description
git config --global --unset https.proxy
If above not added, below ERROR was encountered:-
Image description
git push https://$(DevOpsGITUser):${{ parameters.PAT }}@$(DevOpsOrganisationWithoutHTTPS)/${{ parameters.DevOpsProjName }}/_git/${{ parameters.DevOpsProjName }}
If above not added, below ERROR was encountered:-
Image description
PIPELINES FOLDERS CREATED SUCCESSFULLY:-
Image description
POINTS TO NOTE ON "PIPELINE ENVIRONMENT" AND "AGENT POOL":-
"Pipeline Environment" and "Agent Pool" CANNOT be created using Azure DevOps CLI. Hence both are created using Azure DevOps REST API.
Details on REST API Add Pipeline Environment can be found HERE
Details on REST API Add Agent can be found HERE
PIPELINE ENVIRONMENT CREATED SUCCESSFULLY USING DEVOPS REST API:-
Image description
Below follows the code snippet for PIPELINE ENVIRONMENT:-
#############################################
# Create Environment Using DEVOPS REST API:-
#############################################
    - task: PowerShell@2
      displayName: CREATE PIPELINE ENVIRONMENT 
      inputs:
        targetType: 'inline'
        script: |
         $env = "$(DevOpsEnv)"
         $envJSON = @{
         name = $env
         description = "My $env environment"
          }
         $infile = "envdetails.json"
         Set-Content -Path $infile -Value ($envJSON | ConvertTo-Json)
         az devops invoke --area distributedtask --resource environments --route-parameters project=${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --http-method POST --in-file $infile --api-version "6.0-preview"
AGENT POOL CREATED SUCCESSFULLY USING DEVOPS REST API:-
Image description
Below follows the code snippet for AGENT POOL:-
#############################################
# Create Agent Pool Using DEVOPS REST API:-
#############################################
    - task: PowerShell@2
      displayName: CREATE AGENT POOL 
      inputs:
        targetType: 'inline'
        script: |
         $pool = "$(DevOpsPool)" 
         $poolJSON = @{
         name = $pool
         description = "My $pool Agent Pool"
          }
         $infile = "pooldetails.json"
         Set-Content -Path $infile -Value ($poolJSON | ConvertTo-Json)
         az devops invoke --area distributedtask --resource pools --route-parameters project=${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --http-method POST --in-file $infile --api-version "6.0"
BRANCH POLICIES CREATED SUCCESSFULLY:-
Policies are 1) MINIMUM NUMBER OF REVIEWERS 2) CHECK FOR LINKED WORK ITEMS 3) CHECK FOR COMMENT RESOLUTION, 4) LIMIT MERGE TYPES, and 5) CODE REVIEWERS
Image description
Image description
Below follows the code snippet for BRANCH POLICIES:-
###################################
# Branch policies and settings:-
###################################

##########################################
# Require a minimum number of reviewers:-
##########################################
    - task: PowerShell@2
      displayName: POLICY - MIN NUMBER OF REVIEWERS 
      inputs:
        targetType: 'inline'
        script: |
         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table

         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table

         $repoID = az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id
         echo $repoID
         az repos policy approver-count create --project ${{ parameters.DevOpsProjName }} --allow-downvotes false --blocking true --branch main --creator-vote-counts false --enabled true --minimum-approver-count 2 --repository-id $repoID --reset-on-source-push true --output table
################################
# Check for Linked Work Items:-
################################
    - task: PowerShell@2
      displayName: POLICY - CHECK FOR LINKED WORK ITEMS 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --output table
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --output table
         az repos policy work-item-linking create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --output table
################################
# Check for Comment Resolution:-
################################
    - task: PowerShell@2
      displayName: POLICY - CHECK FOR COMMENT RESOLUTION 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --output table
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --output table
         az repos policy comment-required create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --output table
#######################
# Limit merge types:-
#######################
    - task: PowerShell@2
      displayName: POLICY - LIMIT MERGE TYPES 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table
         az repos policy merge-strategy create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --allow-no-fast-forward true --allow-rebase true --allow-rebase-merge true --allow-squash true --output table
###########################################
# Automatically include code reviewers:-
###########################################
    - task: PowerShell@2
      displayName: POLICY - CODE REVIEWERS 
      inputs:
        targetType: 'inline'
        script: |
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [0].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [1].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table
         az repos policy required-reviewer create --project ${{ parameters.DevOpsProjName }} --blocking true --branch main --enabled true --message "REVIEW REQUIRED" --repository-id $(az repos list --project ${{ parameters.DevOpsProjName }} --org ${{ parameters.DevOpsOrganisation }} --query [2].id) --required-reviewer-ids $(DevOpsReqReviewer1) --output table


This content originally appeared on DEV Community and was authored by Arindam Mitra


Print Share Comment Cite Upload Translate Updates
APA

Arindam Mitra | Sciencx (2022-04-07T22:19:48+00:00) POWER OF DEVOPS CLI AND REST API. Retrieved from https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/

MLA
" » POWER OF DEVOPS CLI AND REST API." Arindam Mitra | Sciencx - Thursday April 7, 2022, https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/
HARVARD
Arindam Mitra | Sciencx Thursday April 7, 2022 » POWER OF DEVOPS CLI AND REST API., viewed ,<https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/>
VANCOUVER
Arindam Mitra | Sciencx - » POWER OF DEVOPS CLI AND REST API. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/
CHICAGO
" » POWER OF DEVOPS CLI AND REST API." Arindam Mitra | Sciencx - Accessed . https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/
IEEE
" » POWER OF DEVOPS CLI AND REST API." Arindam Mitra | Sciencx [Online]. Available: https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/. [Accessed: ]
rf:citation
» POWER OF DEVOPS CLI AND REST API | Arindam Mitra | Sciencx | https://www.scien.cx/2022/04/07/power-of-devops-cli-and-rest-api/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.