Introduction

Azure DevOps promotes collaboration between development and operation to faster and more reliable software delivery.

In this article, I am going to demonstrate, How to automate & execute the PnP Powershell using Azure DevOps Pipeline. Let's get started with the below steps.

Step 1. Create Azure DevOps Repository

Create Azure DevOps Repository

Step 2. Configure the YAML pipeline

Select the Pipeline from the left-hand side and then select the Azure Repos Git i.e. (free private Git Repositories).

Select Azure Git

Select the respective created repository (as we created earlier with the name PNPPowershell).

Select Repo

Next step with configuration, Do select "Starter pipeline"

Start Pipeline

The YAML file will get generated with the below sample code.

YAML

Step 3. Create & Upload the PnP PowerShell

PnP PowerShell Code snippet to display the Site Title & credentials is parameterized. It is always a best practice to store the credentials as managed identity or user library group, which exists under pipeline sections.

param (
[Parameter()]
[string]$UserName, 
[Parameter()]
[SecureString]$Password
)

# Site URL, It can be parametrize also
$SiteURL= "https://mittal1201.sharepoint.com/sites/commsitehub"

#$SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist ($UserName, $Password)

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credential $Cred

#Get the Root Web
$Web = Get-PnPWeb
 
#Get the Site Title
Write-host -f Green "Site Title " $Web.Title

If you have mapped the repo with a local machine, then desired IDE can be used, such as Visual Code, to do check-in & check-out. As part of this demo, I directly uploaded this file with the below click.

Upload PS1

Step 4. Add Credentials to Pipeline

Add CRED

Step 5. Add YML file task

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- main

pool:
  vmImage: ubuntu-latest

variables:
 - group: Credentials
 - name: user_name
   value: $(username)
 - name: pass_word
   value: $(password)


steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: 'Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force'

- task: PowerShell@2
  displayName: 'PowerShell Script'
  inputs:
    targetType: filePath
    filePath: ./SiteTitle.ps1
    arguments: '-username "$(user_name)" -password $(ConvertTo-SecureString "$(pass_word)" -AsPlainText -Force)'

Step 6. Create and Execute Pipeline

Select Pipeline and click on Run Pipeline.

Under Run pipeline, choose the branch under which yml file exists.

Click Run to execute.

Run Pipeline

Output

Once the Pipeline execution is complete and we extend the script section under the job, and we can see Site Title has been printed.

Pipeline

So this is the secure & automated way to execute the PNP Powershell using Azure DevOps Pipeline. Hope you have learned something new and refreshing in this article.