オンプレミスでTFSを使用しています。私の問題は、リリース中に、手動介入によって分離された2つのエージェントフェーズがあることです。
最初のエージェントフェーズでは、次の変数を設定しました。
Write-Verbose $("##vso[task.setvariable variable={0};]{1}" -f $variablename, $variable)
問題は、2番目のエージェントフェーズでは、同じエージェントが2番目のリリースフェーズで使用されている場合でも、この変数が存在しないことです。
同じリリース中に2つのエージェントフェーズ間で変数を渡すにはどうすればよいですか?
変数を永続化する方法はありません(Powershell変数またはVSTSユーザー定義変数に関係なく)2つのエージェントフェーズ間(および環境)今のところ。
また、関連する問題があります ロギングコマンドを介して設定された変数はエージェント間で永続的ではありません 、フォローアップできます。
当面の回避策は、次のエージェントフェーズで変数を再度定義することです。
TFS Rest APIを使用し、リリースで新しい変数を作成することにより、エージェントフェーズ間で変数を共有できます。
このタスクを容易にするヘルパーモジュールを作成できます。
$Env:Release_ReleaseId
_を使用します。Add-Member
_を使用して、ステップ1で返されたリリースの変数ハッシュテーブルにNotePropertyを追加します。名前は目的の変数名で、値は ConfigurationVariableValue です。このアプローチを使用するには、最初のエージェントで変数を設定します。次に、2番目のエージェントで、$(VariableName)
セマンティックを使用してTFS変数を読み取るだけです。
それを行う正しい方法は、Variablegroupsを使用してパイプライン間で永続化することです https://docs.Microsoft.com/en-us/Azure/devops/pipelines/library/variable-groups?view=Azure-devops&tabs= yaml
「可変脱水タスク」を使用して、ビルドパイプラインのアーティファクトフォルダーに値を書き込みました。次に、インラインPowerShellでjsonを読みました。現在、私はリリースパイプラインのすべてのタスクでそれを読んでいます。あなたはグローバルまたは環境を設定できるはずです?変数を使用し、代わりにそれを使用します。おそらく2017年に修正されましたが、私は2015を使用しています。