web-dev-qa-db-ja.com

Azure Devops(VSTS)でリリース定義をインポートするにはどうすればよいですか?

1つのAzure Devops(VSTS)プロジェクトから別のプロジェクトにリリース定義をコピーしようとしています。ソースプロジェクトでは、リリース定義をjsonファイルとしてエクスポートできます。

export release definition

しかし、これをターゲットプロジェクトにインポートする方法を見つけることができません。新しい定義を作成するオプションのみを取得します。

create release definition

8
reggaemahn

enter image description here

[ビルドとリリース]、[リリース]の順に移動すると、オプションが表示されます。 [+]ボタンをクリックすると、リリース定義をインポートするオプションがあります

さらにサポートが必要な場合はお知らせください。

5
noor

VSTSはAzure DevOpsに名前変更/更新されるため、上記のオプションを見つけるためにUIにいくつかの変更があります。

インポート用

enter image description here

エクスポート用

enter image description here

補遺について

ビルド/リリースのすべての定義は、パイプラインと呼ばれる単一の用語とともに提供されました。したがって、新しいリリース定義をインポートするためにダミーのリリース定義を作成する必要はありません。ダミーの定義を持たずに新しいリリース定義をインポートできます。

8
Jayendran

上記のコメントを読んで、異なるVSTS/Azure DevOpsオリジネーションからリリース定義をインポートする際に問題が発生する理由は、エクスポートしたリリース定義にGUID存在しないオブジェクトへの参照が含まれているためですリリース定義をインポートする組織またはプロジェクトで使用するため、テンプレートとして使用できるスムーズで完全に統合されたリリース定義を成功させるには、袖をまくり上げて作業を行う必要があります。ここで見つかるREST API: https://docs.Microsoft.com/en-us/rest/api/vsts/release/definitions/create ?view = vsts-rest-4.1

これが私の技術的な答えであり、リリース定義を複製し、何度も使用するテンプレートを作成するために行ったことです。

  1. 選択したリリース定義をエクスポートします

  2. https://jsonformatter.curiousconcept.com のようなツールでJSONをフォーマットして読みやすくし、ReleasePipelineTemplate-Formatted.jsonのようなテキストファイルに保存します。

  3. リリース定義で定義したコンポーネントはわかりませんが、全体を見て、GUIDがどのように使用されているかを確認してください。置き換える必要があるGUIDを見つけるために、リリース定義を作成すると役立つ場合があります。

  4. 検索するGUIDは、SYSTEM_COLLECTIONID、SYSTEM_TEAMPROJECTID、SYSTEM_DEFINITIONID、BUILD_QUEUEDBYIDです。

  5. 上記の変数をビルド組織とプロジェクトから取得してみましょう。これらを取得するには、通常のビルド中にいくつかの環境変数を出力する必要があります。そのため、CIビルドの最初のどこかにビルドステップを追加してください。ビルドステップは、次のコマンド「C:\ Windows\System32\cmd.exe」と引数「/ c set」を含む「バッチスクリプト」ステップを追加します。ビルドが完了したら、そのビルドステップのログを調べて、それらの変数の値を見つけます。リリース定義で必要になります。

  6. Jsonファイルを変更する前にコピーを作成する必要があります。 「createdOn」、「modifiedBy」、「modifiedOn」などのいくつかのものを削除して、jsonファイルを少しトリミングする必要があります。一番下にある「URL」は3リンクです。これらは、チームプロジェクトID GUIDなどで変更する必要があります。これは、変更が必要な場所の単なる例です。独自のリリース定義を調べてください。

  7. JSONファイルに必要な変更を加え、インポートを試みる準備ができていると仮定します。次のスクリプト例を使用して、「CreateReleasePipeline.ps1」というPowerShellスクリプトを作成します。

$homeDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$VSTS_RestApiHost = "https://vsrm.dev.Azure.com/yourpath/_apis"
$VSTS_PAT = "YOUR_PAT_TOKEN_HERE"
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($VSTS_PAT)"))}
$relDefInfo = Get-Content "$homeDir\ReleasePipelineTemplate-Formatted.json"
Write-Host "Creating Release Pipeline..."
$createReleaseDef = "$($VSTS_RestApiHost)/release/definitions?api-version=4.1-preview.3"
$response = Invoke-RestMethod -Method Post -Uri $createReleaseDef -Body $relDefInfo -ContentType 'application/json' -Headers $headers
Write-Host "Create Release Pipeline done. Pipeline id: $($response.id)"
if ($response.id -gt 0) {
  Write-Host "Release definition: succeeded."
}
Write-Host $response.id
  1. '。\ CreateReleasePipeline.ps1'を使用してスクリプトを実行すると、出力は次のようになります。
.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71
  1. リリースパイプラインWebページを更新すると、新しく作成されたリリースパイプラインが表示されます。

  2. 結果に満足するまで、先に進んで再試行できます。

これを使用して、REST APIを使用してリリース定義テンプレートをソースコードリポジトリに配置します。これにより、調整を行うときに50+以上のリリースパイプラインを更新する必要がなくなります。 REST API呼び出しは、リリース定義が存在するかどうかをチェックし、存在しない場合は作成し、最新でない場合は更新します。手動で更新するか、新しいgetリポジトリが作成されたときにパイプラインを作成します。可能な限りすべてを自動化したい。一度変更するか、できる限り少なくして、システム自体を更新したい。

これが役立つかどうか教えてください。

4
Antebios

これを受け入れられた答えの補遺としてここに残します。

受け入れられた答えは機能しますが、最初の問題はそれによって正確に解決されなかったことに言及する必要があります。

基本的に、既存のリリース定義がない場合、定義をインポートする方法はないようです。私がやったのは、「ダミー」の定義を作成し、受け入れられた答えが言うことに従うことでした。少なくとも1つの定義を作成すると、その画面が表示されます。そうしないと、質問で表示した画面のみが表示されます。

1
reggaemahn

エクスポート後、jsonファイルが生成され、ローカルフォルダーに保存されます。次に、リリースに移動するか、プラス(+)ボタンをクリックして、そこにInportオプションが表示され、そのjsonファイルを選択します。以上です.....

0
niks