成功したビルドの終わりにGitコミットでgitversionによって決定された現在のバージョン番号を持つタグを設定しようとしています。私はこれをやっているのは最初のものになることはできませんが、うまくいくものを見つけるのに苦労しています。
Azure Devops Pipelineには、成功した「タグソース」の受信元の機能があります。私はこれを設定し、私が持っているエージェントタスクの1つ(gitversion)によって設定されている変数に設定しました
[。]この変数が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」のパイプラインにパイプライン変数を追加しました。スコープ変数。
しかし、この場合、私はただ作成されたタグ "v"を得ました。
だから私は少し立ち往生しています。どういうわけか私がタグを付けたい値ですべてのスコープで変数を動的に作成または設定できるようにする必要があります。
私はこれに関するアイデアにも本当に感謝します。
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 =)リポジトリの貢献権限を割り当てる必要がある
Paul Hatcherからの優れた答えを伸ばす、私は私のためにアカウントがAzure Devops Server 2019でProject Collection Build Service
と呼ばれていたことを追加したいのですが。これは現在 と一致しているようですマイクロソフトのドキュメント 。
答えがすみません、私の評判はまだコメントに満足していません。
この変数がPipelineに追加されたgitversionコンポーネントによって設定されていることをデバッグログで見ることができます。
ログから見た変数GitVersion.MajorMinorPatch
はステップレベル変数です。つまり、そのライフサイクルは現在のGitVersion
タスクからのみ開始されます。
あなたが参照している定義として、それはすべての範囲に必要です。この手段はグローバル変数でなければなりません。たとえば、システムがデフォルトの定義済み変数と,変数タブで指定されたカスタマイズされた変数。
GitVersion task
コンパイルおよび作業ロジックに基づいて、実際には、GitVersion.MajorMinorPatch
値が生成され、現在のビルドのbuild number
として保存されます。
したがって、GitVersion.MajorMinorPatch
値をReposにタグを付ける最も便利な方法は$(build.buildnumber)を使用しています。
v$(Build.BuildNumber)
そしてこれは私の結果です:
更新:
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)
を呼び出すことで、強くお勧めします。