如何在 Azure DevOps Pipeline (Salesforce) 中增加标签

How to increment tags in Azure DevOps Pipeline (Salesforce)

抱歉,我是 Azure DevOps 的新手(我通常使用 Github Actions,不幸的是,我的任务是在 AzureDevOps 上执行此操作)无论如何,我想知道是否可以自动增加我拥有的标签成功部署后在我的分支上?这是我当前在 AzureDevOps 上的设置。

  - script: |
    LastStableTag=`git tag -l testTag_v* --sort=creatordate | tail -n1`
    echo $LastStableTag
    CurrentCommitID=`git rev-parse --verify HEAD`
    echo $CurrentCommitID 
    npx sfdx sfpowerkit:project:diff -t $CurrentCommitID -r $LastStableTag -d delta
  displayName: 'Generate Delta'

基本上,我所做的是获取功能分支和开发分支(基于最新标签)之间的 Salesforce 组件差异。首先验证它,一旦它通过并被合并,另一个管道将 运行 并进行实际部署。

GitHub 操作 上,这是我用来增加标签、碰撞和推送下一个版本的代码。我确实尝试在 Azure DevOps 上执行此操作,但我卡住了,不确定下一步该做什么。有什么方法可以在 Azure DevOps 上实现吗?或者我应该采用不同的方法吗?任何帮助将不胜感激!谢谢。

- name: Get next version
  run: |
       CurrentVersion=`git tag -l testtag_v* --sort=creatordate | tail -n1 | awk -F'v' '{print }'`
       echo CURRENT VERSION: $CurrentVersion
       major=`echo $current_version | cut -d'.' -f 1`
       minor=`echo $current_version | cut -d'.' -f 2`
       minor=`expr $minor + 1`
       patch=`echo $current_version | cut -d'.' -f 3`
       NextVersion=`echo $major.$minor.$patch`
       echo NEXT VERSION: $NextVersion
       echo "::set-output name=next_version::$(echo $NextVersion)"
  id: NextVersion
  
- name: Zip delta folder
  run: |
       zip -r delta.zip delta/
       
- name: Bump version and push tag
  uses: "marvinpinto/action-automatic-releases@latest"
  with:
      repo_token: "secrets"
      prerelease: true
      automatic_release_tag: "testtag_v${{ steps.next_version.outputs.NextVersion }}"
      files: |
        delta.zip

我们可以通过这个创建标签 REST API

步骤:

我们可以参考这个doc来创建PAT令牌。

打开构建管道定义->单击选项卡变量->添加变量 pat 并将值设置为 secret。

添加任务能力shell并输入以下脚本

$connectionToken="$(pat)"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$URL = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:BUILD_REPOSITORY_NAME/_apis/git/repositories/$($env:BUILD_REPOSITORY_ID)/annotatedtags?api-version=5.1-preview.1" 

Write-Host "Hello World" $URL

Write-Host "Hello World" $($env:BUILD_SOURCEVERSION)


$Body = @"
{
  "message": "test",
  "name": "Just",
  "taggedObject": {
    "objectId": "$($env:BUILD_SOURCEVERSION)"
  }
}
"@

Write-Host "Hello World" $Body


$Response = Invoke-RestMethod -Uri $URL -ContentType "application/json" -Body $Body  -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST

注意:objectID 是提交 ID

顺便说一句,我们可以添加任务bash并进入脚本printenv以列出所有环境变量,然后用环境变量替换该字段。

结果:

更新1

我们可以通过此 REST API, your tag format is Testtag-v1.0.0, we could add for each in the power shell script to increment the tag and then set the value to request body name. Or if you add tag commit the tag via pull request, we could get the tag and then set it. You could refer to this 获取现有标签以获取更多详细信息。