Passing variables between release pipelines in azure (trigger azure pipeline extension) - azure-devops

I have a requirement to pass data between 2 release pipelines (to trigger 2nd pipeline on completion of 1st pipeline).
Can we pass variables dynamically between azure RELEASE pipelines using trigger an Azure DevOps pipeline extension?
I tried this blog but unable to find/understand if we can use "output variables" to pass data between azure release pipelines.
https://msftplayground.com/2019/02/trigger-a-pipeline-from-an-azure-devops-pipeline/
Thank you in advance!

Output variables are created by the pipeline and referenced by the other tasks in the pipeline, it means they are dynamic and refers to the result of a particular task.
These cannot be defined statically.
After running the task in the pipeline, output variables value can be known.
There are two different ways to create output variables :
By building support for the variable in the task itself
Setting the value ad-hoc in a script
Below example is defining a task with the name SomeTask that natively creates an output variable called out.
In a task within that same job, you can reference that variable using $(SomeTask.out).
steps:
- task: MyTask#1
name: SomeTask
- script: echo $(SomeTask.out)
For the detailed information regarding how to create output variables and pass between the pipelines, please refer azure devops output variables.

Related

How to get the value of $(Build.SourceVersionMessage) variable in Release Pipeline?

In the Release Pipeline under Release Notes, I am passing $(Build.SourceVersionMessage) but in my app center I am getting "$(Build.SourceVersionMessage)" as a string instead of the actual value. This variable works in my build pipeline under -task. How can I use this variable or any alternative way to fetch the commit message in the Release pipeline.
How to get the value of $(Build.SourceVersionMessage) variable in Release Pipeline?
As we know the value of predefined variable $(Build.SourceVersionMessage) is the build pipeline, we could not get it from release pipeline directly.
To resolve this issue, there are three ways to do it:
Just as GeralexGR comment, writing $(Build.SourceVersionMessage) on a text file and publish this text file as artifact and parse the value in the release pipeline.
Using the REST API Definitions - Update to update the variable with the value of $(Build.SourceVersionMessage) in the build pipeline. Or using az pipelines variable-group variable to update the referenced variable group.
You could check my previous thread for some more details.
You could combine your classic release pipeline and build YAML pipeline to one pipeline with multiple stages, then we could use output variables from tasks:
dependencies.JOB.outputs['TASK.VARIABLE']

Azure DevOps Pipeline - Using YAML, how can I have the build number set to dynamically change, based on the version defined in a different file? [duplicate]

In Azure DevOps, I created a Build. In that Build I created a ProjectBuildNumber Pipeline variable that is Settable at queue time. That variable is then used under Options -> Build number format to set my build number displayed in Azure.
However, I am trying to make that ProjectBuildNumber variable settable in the code I am building/deploying. Is there a way I can have a Task in my Build to update that ProjectBuildNumber and update the Build number in Azure DevOps?
Is there a way I can have a Task in my Build to update that ProjectBuildNumber and update the Build number in Azure DevOps?
The answer is yes.
You could add a Inline Power-Shell task in your build definition to update the value of ProjectBuildNumber and then update the build number base on the it:
Write-Host "##vso[task.setvariable variable=ProjectBuildNumber;]YourUpdateValue"
Write-Host "##vso[build.updatebuildnumber]xxx.$(ProjectBuildNumber).xxx.xxx"
Check the Logging Command during the build for some more details:
Besides, if you want to update the value of a Pipeline Variable on the UI/web portal, you need the REST API (Definitions - Update) to update the value of the build pipeline definition variable from a build task.
There is a very similar thread, you can check the answer for the details:
How to modify Azure DevOps release definition variable from a release task?
Note:Change the API to the build definitions:
PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0
Hope this helps.
We can update Build Number in Azure Devops via two ways .
One from Option Section/Tab and 2nd Via PowerShell Scripts.
To update the build number from Power shell Script.. We need to add following script..
Write-Host "##vso[build.updatebuildnumber]$(VersionNumber).$(VersionRevision)"
Here we have used 2 variables : VersionNumber and VersionRevision.
We need to add 2 variables in PipeLine Configurations..
VersionNumber will be the desired number and VersionRevision is the counter number that will be updated every time, when ever we will create a new build.
Please check the complete demonstration from You tube video
https://youtu.be/WBmFTmzopiQ
Have created power shell task for that
# replace existing Build.BuildNumber with
# NAME_2.1.2.54_20211220.16_345
- task: PowerShell#2
displayName: 'Update Version Number'
inputs:
targetType: 'inline'
script: |
$lines = Get-ChildItem ".\Project\My Project\AssemblyInfo.vb"
$match = $lines | Select-String -Pattern "\<Assembly\:\s+AssemblyVersion\(""(\d+\.\d+\.\d+\.\d+)""\)\>"
$version = $match.Matches[0].Groups[1].Value
[Version]::Parse($version) # validate
$tag = "NAME_$($version)_$(Build.BuildNumber)_$(Build.BuildId)"
Write-Host "##vso[build.updatebuildnumber]$tag"
Check out the Microsoft documentation on this: Variables
Depending on your operating system you can add a Powershell/Batch/Bash Task and change the variable.
Edit: After some research it appears that the change of the variable will show up in the following task. Take a look at this issue Update environment variables using task.setvariable in a bash script does not work

How to pass variables from one pipeline to another pipeline in azure devops

I have two pipelines(Pipeline A and Pipeline B) configured for build and release and Pipeline A triggers Pipeline B for deployment.
I defined variables on pipeline A and need them on pipeline B to use for deployment . is it possible to pass them between two these pipelines ?.
any leads are much appreciated.
You can use for that variable group. Here you have doc about variable group.
Use a variable group to store values that you want to control and make available across multiple pipelines. You can also use variable groups to store secrets and other values that might need to be passed into a YAML pipeline. Variable groups are defined and managed in the Library page under Pipelines.
What you need is declare the same variable in both pipelines:
variables:
- group: my-variable-group
and for instance if you want to update variable in one pipeline and have this updated value available in second you can use Azure CLI
az pipelines variable-group variable update --group-id
--name
[--detect {false, true}]
[--new-name]
[--org]
[--project]
[--prompt-value {false, true}]
[--secret {false, true}]
[--value]
You should call this command from Azure CLI task
- task: AzureCLI#2
displayName: Azure CLI
inputs:
azureSubscription: <Name of the Azure Resource Manager service connection>
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
az --version
az pipelines variable-group --group-id value-of-group-id --name some-name --org your-org --project your-project --value some-value
And if you wanto to Trigger one pipeline after another you can use pipeline resource:
resources:
pipelines:
- pipeline: securitylib # Name of the pipeline resource
source: security-lib-ci # Name of the pipeline referenced by the pipeline resource
trigger:
branches:
- releases/*
- master
Just like Krzysztof Madej pointed out, Variable groups will help to share static values across builds and releases pipeline.
What you need is a way to pass variables from one pipeline to another. I'm afraid to say there is no official way to do this for now.
As a workaround you could update the value of your variables inside your variable group. There are multiple ways to handle this, Rest API, powershell, 3rd-party extension. Detail ways please refer answers in this question: How to Increase/Update Variable Group value using Azure Devops Build Definition?
If you want to get the value of variable in the pipeline. Since you have used logging command to update that variable.
What you need to do only is using Rest API to get that particular build log to fetch related info.
How to pass variables from one pipeline to another pipeline in azure devops
You could set some default variables in the release pipeline, then add a inline powershell task to invoke the REST API (Definitions - Update) to update the value of the release definition variable in the build pipeline with values comes from build pipeline.
PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=5.0
Now, we could use the values from multiple pipelines in the release pipeline.
Please check my previous thread for some more details.
Note:Do not forget to use REST API to restore those changed variables to the default value, so that we could use it next time.

How to update a pipeline variable after the task is succeeded, through `output variable` section or some other method in Azure devops

I want to update a pipeline variable once my task is finished. Can I do it through output variable section provided in azure DevOps?
The main objective is to let downstream tasks know that the list of specific previous tasks have succeeded, which I can check by adding custom conditions.
If your tasks are in an agent job, there is no need to use the output variable section, just add a Powershell task after the successful task, you can overwrite/update the value of the variables by using the logging command to set the variables again in Azure Devops pipeline.
Write-Host "##vso[task.setvariable variable={variableName}]{updateValue}"
To set a variable from a script, you use the task.setvariable logging command. This doesn't update the environment variables, but it does make the new variable available to downstream steps within the same job. In addition ,here is a reference.

How to use output variable of Deploy to Kubernetes task in Azure pipeline (VSTS)

I am new to VSTS and Azure Kubernetes. I am building a VSTS CD pipeline. I have added a Deploy to Kubernetes task in my pipeline. I am executing the get command and trying to store the output in the output variables (which is available at the bottom of the Deploy to kubernetes task). I have set the variable name.
I am trying to fetch the value of the above output variable. I have used command line task to set a value to the variable as mentioned below
echo '##vso[task.setvariable variable=myStatusVar;isSecret=false;]$(myvar)'
where myvar is the variable, which is set in the Deploy to kubernetes task as output variable.
After that in another command line task, I am trying to access the myStatusVar variable value, but when I execute the release pipeline, it shows the message:
myvar command not found
Can anyone let me know, how to use the output variable of the Deploy to kuberentes task of VSTS pipeline?
As stated in the comments your variable is 'exposed' as 'myvar.KubectlOutput'
the way you are able to use it in scripts differs based on type of scripting you are doing:
Batch script: %MYVAR_KUBECTLOUTPUT%
PowerShell script: $env:MYVAR_KUBECTLOUTPUT
Bash script: $MYVAR_KUBECTLOUTPUT
Azure Devops 'designer view': $(myvar.KubectlOutput)
For more details on this see the documentation on using variables in Azure DevOps: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch