web-dev-qa-db-ja.com

Azure DevopsからGITタグを設定する

成功したビルドの終わりにGitコミットでgitversionによって決定された現在のバージョン番号を持つタグを設定しようとしています。私はこれをやっているのは最初のものになることはできませんが、うまくいくものを見つけるのに苦労しています。

Azure Devops Pipelineには、成功した「タグソース」の受信元の機能があります。私はこれを設定し、私が持っているエージェントタスクの1つ(gitversion)によって設定されている変数に設定しました

Tag Sources

[。]この変数がPipelineに追加されたgitversionコンポーネントによって設定されていることをデバッグログで見ることができます。

2019-12-06T20:54:20.2390794Z ##[debug]Processed: ##vso[task.setvariable variable=GitVersion.MajorMinorPatch;]2.98.0
 _

ただし、これをこのままにしても、「V $(gitversion.majorminorpatch)」として作成されたタグが作成されます。つまり、その変数が存在しなくなったことをタグが作成されていることを意味します。

タグフォーマットヘルプツールチップは言う

タグフォーマットは、「all」の範囲を持つユーザー定義または事前定義変数の組み合わせです。たとえば、 '$(build.definitionName)$(build.definitionversion) $(build.buildid)$(build.buildNumber)$(my.variable) '"

だから私は問題を推測することで、パイプライン中に作成されたこの変数がすべての範囲を持たないことです。

次に、これが正しいスコープにあることを希望し、「task.setVariable」コマンドが実行されたときに、これがこの高値の変数値を設定することを期待して、「gitversion.majorminorpatch」のパイプラインにパイプライン変数を追加しました。スコープ変数。

enter image description here

しかし、この場合、私はただ作成されたタグ "v"を得ました。

だから私は少し立ち往生しています。どういうわけか私がタグを付けたい値ですべてのスコープで変数を動的に作成または設定できるようにする必要があります。

私はこれに関するアイデアにも本当に感謝します。

9
Brett

YAMLパイプラインをやっている場合は、次の手順を追加できます。

- checkout: self
  persistCredentials: true

## Rest of pipeline ##

- script: |
     git tag $(GitVersion.NugetVersionV2)
     git Push Origin $(GitVersion.NugetVersionV2)
  workingDirectory: $(Build.SourcesDirectory)
 _

persistCredentialsは、トークンを他のGITコマンドに自動的に渡すことができます。 workingDirectoryの割り当てに注意してください。そうしないと、場所がGITリポジトリではなかったというエラーがありました。

注釈付きタグ 軽量タグではなく、構文はこのようになります...

- script: |
     git tag -a <tagname> -m <message>
 _

ユーザー/日付をそれに対して入手する必要があります ユーザー名/ emailを設定してください もe.

- script: |
    git config --global user.name "BuildService"
    git config --global user.email "[email protected]"
    git tag -a <tagname> -m <message>
 _

これが機能するには、プロジェクトコレクションビルドサーバーアカウントプロジェクトビルドサービスアカウントGROUP =)リポジトリの貢献権限を割り当てる必要がある

3
Paul Hatcher

Paul Hatcherからの優れた答えを伸ばす、私は私のためにアカウントがAzure Devops Server 2019でProject Collection Build Serviceと呼ばれていたことを追加したいのですが。これは現在 と一致しているようですマイクロソフトのドキュメント

答えがすみません、私の評判はまだコメントに満足していません。

1

この変数がPipelineに追加されたgitversionコンポーネントによって設定されていることをデバッグログで見ることができます。

ログから見た変数GitVersion.MajorMinorPatchステップレベル変数です。つまり、そのライフサイクルは現在のGitVersionタスクからのみ開始されます。

enter image description here

あなたが参照している定義として、それはすべての範囲に必要です。この手段はグローバル変数でなければなりません。たとえば、システムがデフォルトの定義済み変数と,変数タブで指定されたカスタマイズされた変数。


GitVersion taskコンパイルおよび作業ロジックに基づいて、実際には、GitVersion.MajorMinorPatch値が生成され、現在のビルドのbuild numberとして保存されます。

enter image description here

したがって、GitVersion.MajorMinorPatch値をReposにタグを付ける最も便利な方法は$(build.buildnumber)を使用しています。

v$(Build.BuildNumber)

enter image description here

そしてこれは私の結果です:

enter image description here


更新:

GitVersionタスクに生成されたGitVersion.MajorMinorPatch変数に追加するには、以下のスクリプトを入力してくださいPowerShellタスク:

$connectionToken="{PAT Token}"
$urlget = "https://dev.Azure.com/{org}/{project}/_apis/build/definitions/$(System.DefinitionId)?api-version=5.1"
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$getdef = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -ContentType application/json -Uri $urlget 
Write-Host Pipeline = $($getdef | ConvertTo-Json -Depth 100)
$bvalue=@"
    {
      "value": "$(GitVersion.MajorMinorPatch)"
    }
"@
$getdef.variables | add-member -Name "GitVersion.MajorMinorPatch" -value (Convertfrom-Json $bvalue) -MemberType NoteProperty -Force -PassThru

$getdef = $getdef | ConvertTo-Json -Depth 100
$getdef | clip
$urlput = "https://dev.Azure.com/{org}/{project}/_apis/build/definitions/$(System.DefinitionId)?api-version=5.1"
$putdef = Invoke-RestMethod -Uri $urlput -Method PUT -Body $getdef -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

前述したように、Tag format$(GitVersion.MajorMinorPatch)を指定することができるとは思わない。

$(Build.BuildNumber) [function()] _値をタグにするために$(GitVersion.MajorMinorPatch)を呼び出すことで、強くお勧めします。

1