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?
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.
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.
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}
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:
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
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.