【问题标题】:How to increment tags in Azure DevOps Pipeline (Salesforce)如何在 Azure DevOps Pipeline (Salesforce) 中增加标签
【发布时间】:2021-03-15 04:23:32
【问题描述】:

对不起,我对 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 Actions 上,这是我用来增加标签、碰撞和推送下一个版本的代码。我确实尝试在 Azure DevOps 上执行此操作,但我被卡住了,不知道下一步该做什么。有什么办法可以在 Azure DevOps 上做到这一点?还是我应该采用不同的方法?任何帮助将不胜感激!谢谢。

- name: Get next version
  run: |
       CurrentVersion=`git tag -l testtag_v* --sort=creatordate | tail -n1 | awk -F'v' '{print $2}'`
       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

【问题讨论】:

  • 您好,我添加了一个答案,请查看。如果我误解了你,你能更详细地描述你的问题吗?谢谢。

标签: azure azure-devops continuous-integration yaml azure-pipelines


【解决方案1】:

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

步骤:

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

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

添加任务电源外壳并输入以下脚本

$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获取现有的标签,你的标签格式是Testtag-v1.0.0,我们可以在power shell脚本中添加for each来增加标签,然后将值设置为请求正文name。或者如果您通过拉取请求添加标签提交标签,我们可以获取标签然后设置它。您可以参考此answer 了解更多详情。

【讨论】:

  • 我明白了这个概念,但我不确定这是否是我正在寻找的答案。这也可以附加或增加现有标签吗?例如,我们存储库中的当前标签是 Testtag-v1.0.0。开发人员完成了他的用户故事并合并了一个拉取请求。该脚本将自动运行,一旦部署完成,它还会将标签更新为 Testtag-v1.1.0。所以下次合并拉取请求时,脚本现在将检索最新的标签,即 Testtag-v1.1.0 并包含最新的更改/组件。
  • 基本上,我的脚本使用源分支的 SHA 和主分支(或主分支)的最新标签验证/部署两个分支之间的增量。所以每次拉取请求被合并到主分支(或主分支)时,它应该自动更新标签,或者增加/追加它。取决于主要、次要或补丁。
  • 嗨@PercyJackson,我已经更新了答案,你可以检查一下。如果您有任何问题,可以随时在这里分享。
  • 嗨@PercyJackson,刚刚签到看看这个问题现在是否仍然阻碍你?这个问题有什么更新吗?如果这个答案有帮助,请accept it作为答案吗?因此,它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程。谢谢。祝你今天过得愉快。 :)
  • 嗨,是的,能够做到。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-31
  • 2021-09-10
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
相关资源
最近更新 更多