web-dev-qa-db-fra.com

Les paramètres du pipeline YAML Azure DevOps ne fonctionnent pas à partir de REST API Trigger

J'essaie de créer un pipeline basé sur YAML qui prend un paramètre, puis de déclencher le pipeline pour qu'il s'exécute à partir d'une API Azure DevOps REST API. Je peux voir que la construction est mise en file d'attente, mais le paramètre n'a pas été remplacé par mon POST body.

Mon modèle my-template.yaml.

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


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

Mon pipeline yaml qui étend le modèle.

trigger:
    - master

extends:
    template: my-template.yaml

Ensuite, je déclenche ce pipeline en utilisant le queue build REST API: https://dev.Azure.com/{organization}/{project}/_apis/build/builds?api-version=5.1 avec un POST corps comme ci-dessous.

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

Je m'attends donc à ce que l'exécution du pipeline fasse écho hello world au lieu de N/A. Malheureusement, je vois toujours N/A dans les résultats du pipeline.

Quelqu'un a une idée de ce qui s'est passé? Est-ce que je manque quelque chose?

5
little-eyes

Il semble que ce soit un problème dans l'API Azure DevOps Rest: https://developercommunity.visualstudio.com/content/problem/1000544/parameters-to-api-rest-build-queue-method.html

J'ai rencontré le même problème et j'ai remarqué que le paramètre d'exécution est introduit dans l'exécution du pipeline en tant que variable. Ainsi, l'utilisation de $ (MyParam) au lieu de $ {{parameters.MyParam}} dans le yaml résout le problème.

0
MaMazav

Vous n'envoyez pas votre paramètre de votre pipeline au modèle.

Regardez comment la documentation dit que cela devrait arriver. Je n'ai pas testé mais je pense que si vous connectez correctement le paramètre au modèle, vous obtiendrez ce que vous attendez en utilisant le modèle.

Fondamentalement, votre modèle devrait ressembler à ceci:

# 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 }}

Et votre pipeline devrait être ainsi:

# 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

Notez le parameters: yesNo: false

Aussi , le Documentation des paramètres d'exécution pourrait vous suggérons de définir vos paramètres de pipeline en tant que paramètres explicites.

0
Josh Gust

Vous avez la solution après avoir passé 2 à 3 heures:

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

   Where 2= {pipelineId}

enter image description here

En-tête:

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

En ce moment, j'utilise: Postman pour tester cette API Donc, partager la capture d'écran principale: enter image description hereenter image description here

Dans la partie du corps :

{"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.}

Cela fonctionne pour moi et avoir testé environ 5 à 7 fois

0
Rawan-25

On dirait que les parameters ne sont pas nécessaires dans ce cas, j'ai fusionné le yaml en un comme ci-dessous.

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

steps:
    - script: echo $(testParam)

Notez la différence entre $(testParam) et ${{ parameters.testParam }}.

Ensuite, je le déclenche à partir de REST API et cela fonctionne parfaitement.

enter image description here

0
little-eyes