web-dev-qa-db-ja.com

REST APIトリガーからAzure DevOps YAMLパイプラインパラメーターが機能しない

パラメーターを取るYAMLベースのパイプラインを作成し、パイプラインをトリガーしてAzure DevOpsから実行しようとしていますREST API。ビルドがキューに入れられるのを確認できますが、パラメータはmy POST body。

私のテンプレートmy-template.yaml

parameters:
    - name: testParam
      type: string
      default: 'N/A'


steps:
    - script: echo ${{ parameters.testParam }}

テンプレートを拡張する私のパイプラインyaml。

trigger:
    - master

extends:
    template: my-template.yaml

次に、queue build REST API:https://dev.Azure.com/{organization}/{project}/_apis/build/builds?api-version=5.1 with POST bodyを以下のように使用して、このパイプラインをトリガーします。

{
    "parameters": "{\"testParam\": \"hello world\"}",
    "definition": {
        "id": 50642
    },
    "sourceBranch": "refs/heads/master"
}

したがって、パイプラインの実行はhello worldではなくN/Aをエコーすることを期待しています。残念ながら、パイプラインの結果にはまだN/Aが表示されています。

誰が何が起こったのか知っていますか?何か寂しいですか?

5
little-eyes

Azure DevOps Rest APIの問題のようです: https://developercommunity.visualstudio.com/content/problem/1000544/parameters-to-api-rest-build-queue-method.html

同じ問題が発生し、ランタイムパラメーターがパイプライン実行に変数として導入されていることに気付きました。したがって、yamlで$ {{parameters.MyParam}}の代わりに$(MyParam)を使用すると、問題が解決します。

0
MaMazav

パイプラインからテンプレートにパラメーターを送信していません。

documentationがこれが起こるべきであると言っている方法を見てください。私はテストしていませんが、パラメーターをテンプレートに正しく配線すると、テンプレートを使用して期待どおりの結果が得られると思います。

基本的に、テンプレートは次のようになります。

# File: simple-param.yml
parameters:
- name: yesNo # name of the parameter; required
  type: boolean # data type of the parameter; required
  default: false

steps:
    - script: echo ${{ parameters.yesNo }}

そしてあなたのパイプラインはこのようにする必要があります:

# File: Azure-pipelines.yml
trigger:
- master

extends:
    template: simple-param.yml
    parameters:
        yesNo: false # set to a non-boolean value to have the build fail

parameters: yesNo: false

また、Runtime Parameters Documentationかもしれませんパイプラインパラメーターを明示的なパラメーターとして定義することをお勧めします。

0
Josh Gust

2〜3時間を費やしてソリューションを入手します。

https://dev.Azure.com/{organization}/{project}/_apis/pipelines/2/runs?api-version=6.0-preview.1

   Where 2= {pipelineId}

enter image description here

ヘッダー:

Authorization: Personal access token. Use any value for the user name and the token as the password.
Type: basic

Content-Type : application/json
Accept : application/json

今私が使用しているもの:このAPIをテストするためのPostmanなので、投稿のメインスクリーンショットを共有します: enter image description hereenter image description here

Body partで:

{"previewRun":false,"stagesToSkip": [],"resources": {"repositories": {"self": {"refName": "refs/heads/master"}}},"templateParameters": {"testParam": "rawat Rob" },"variables": {}}

previewRun :{If true, don't actually create a new run. Instead, return the final YAML document after parsing templates.}

それは私のために働いており、約5〜7回テストをしています

0
Rawan-25

この場合、parametersは必要ないようです。以下のようにyamlをマージしました。

_# File: Azure-pipelines.yml
trigger:
    - master

steps:
    - script: echo $(testParam)

_

$(testParam)と_${{ parameters.testParam }}_の違いに注意してください。

次に、REST APIからトリガーします。完全に正常に動作します。

enter image description here

0
little-eyes