web-dev-qa-db-ja.com

2つのエージェントフェーズ間でリリース変数を渡す

オンプレミスでTFSを使用しています。私の問題は、リリース中に、手動介入によって分離された2つのエージェントフェーズがあることです。

最初のエージェントフェーズでは、次の変数を設定しました。

Write-Verbose $("##vso[task.setvariable variable={0};]{1}" -f $variablename, $variable)

問題は、2番目のエージェントフェーズでは、同じエージェントが2番目のリリースフェーズで使用されている場合でも、この変数が存在しないことです。

同じリリース中に2つのエージェントフェーズ間で変数を渡すにはどうすればよいですか?

9
Pierre P.

変数を永続化する方法はありません(Powershell変数またはVSTSユーザー定義変数に関係なく)2つのエージェントフェーズ間(および環境)今のところ。

また、関連する問題があります ロギングコマンドを介して設定された変数はエージェント間で永続的ではありません 、フォローアップできます。

当面の回避策は、次のエージェントフェーズで変数を再度定義することです。

10
Marina Liu

TFS Rest APIを使用し、リリースで新しい変数を作成することにより、エージェントフェーズ間で変数を共有できます。

このタスクを容易にするヘルパーモジュールを作成できます。

  1. リリースを取得 環境変数_$Env:Release_ReleaseId_を使用します。
  2. _Add-Member_を使用して、ステップ1で返されたリリースの変数ハッシュテーブルにNotePropertyを追加します。名前は目的の変数名で、値は ConfigurationVariableValue です。
  3. リリースを保存 変数を追加します。

このアプローチを使用するには、最初のエージェントで変数を設定します。次に、2番目のエージェントで、$(VariableName)セマンティックを使用してTFS変数を読み取るだけです。

それを行う正しい方法は、Variablegroupsを使用してパイプライン間で永続化することです https://docs.Microsoft.com/en-us/Azure/devops/pipelines/library/variable-groups?view=Azure-devops&tabs= yaml

0
aheumaier

「可変脱水タスク」を使用して、ビルドパイプラインのアーティファクトフォルダーに値を書き込みました。次に、インラインPowerShellでjsonを読みました。現在、私はリリースパイプラインのすべてのタスクでそれを読んでいます。あなたはグローバルまたは環境を設定できるはずです?変数を使用し、代わりにそれを使用します。おそらく2017年に修正されましたが、私は2015を使用しています。

0
timB33