Azure devops pipeline restAPI Comment passer une variable avec SourceFolder pour CopyFiles Task, agent auto-hébergé dans un conteneur
ma configuration est la suivante: j'ai hébergé un agent qui, en tant que premier travail, copie les fichiers de l'agent auto-hébergé qui est démarré en tant que conteneur de docker
le pipeline hébergé est déclenché avec l'API rest "run" du pipeline:
https://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run%20pipeline?view=azure-devops-rest-6.0
voici à quoi ressemble le corps maintenant:
"resources": {
"repositories:": {
"self": {
"refName": "refs/heads/my_branch"
}
}
}
cela fonctionne très bien.
maintenant, la partie du pipeline hébergé ressemble à ceci:
- job: self_hosted_connect
timeoutInMinutes: 10
pool: Default
steps:
- task: CopyFiles@2
inputs:
SourceFolder: '/home/copy_dir'
Contents: '**'
TargetFolder: '$(build.artifactstagingdirectory)'
aussi, fonctionne très bien.
Mes questions sont:
J'aime envoyer dans l'API de repos "run" un autre paramètre qui contient le chemin SourceFolder afin que la tâche CopyFiles soit dynamique et n'ait pas de chemin SourceFolder en dur
Lorsque j'exécute l'agent auto-hébergé à partir de Docker, comment dire à l'agent auto-hébergé d'inclure le répertoire en dehors de son répertoire de travail? donc le pipeline n'échouera pas avec l'erreur:
# [error] Non géré: introuvable SourceFolder: / home / copy_dir
MISE À JOUR J'ai mis à jour la demande pour:
{
"resources": {
"repositories:": {
"self": {
"refName": "refs/heads/my_branch"
}
}
},
"templateParameters": {
"Folderpath":"{/home/foo/my_dir}"
}
}
mais j'obtiens une erreur:
{
"$id": "1",
"innerException": null,
"message": "Unexpected parameter 'Folderpath'",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Réponses
envoyer dans l'API de repos "run" un autre paramètre qui contient le chemin SourceFolder Nous pouvons utiliser les paramètres d'exécution dans le pipeline.
Échantillon YAML:
parameters:
- name: Folderpath
displayName: 'configure Folder path'
type: string
default: {SourceFolder path}
steps:
- task: CopyFiles@2
inputs:
SourceFolder: '${{ parameters.Folderpath}}' Contents: '**' TargetFolder: '$(build.artifactstagingdirectory)'
URL de la demande:
POST https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=6.0-preview.1
Corps de la demande:
{
"resources":{
"repositories":{
"self":{"refName":"refs/heads/{my_branch}"
}
}
},
"templateParameters": {
"Folderpath":"{SourceFolder path}"
}
}
comment dire à l'agent auto-hébergé d'inclure le répertoire en dehors de son répertoire de travail?
Nous pouvons copier le dossier local ou les variables prédéfinies azure DevOps pour définir le dossier source.
Mise à jour1
Nous devons définir le paramètre dans la construction YAML, sinon, nous obtiendrons l'erreur Paramètre inattendu 'Chemin du dossier' "
MISE À JOUR 2
comme je l'aime prendre du chemin réel (celui que je passe dans la demande) sur le disque où le docker auto-hébergé s'exécute et non par rapport au répertoire de travail du docker, alors maintenant il me donne cette erreur:
[error]Unhandled: Not found SourceFolder: /azp/agent/_work/1/s/{/home/copy_dir}
où / azp est le répertoire de travail du docker
J'ai configuré le docker à partir de ce lien:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops