Azure Devops Pipeline restAPI Übergeben von Variablen mit SourceFolder for CopyFiles Task, einem selbst gehosteten Agenten im Container

Sep 04 2020

Meine Einrichtung ist wie folgt: Ich habe einen Agenten gehostet, der als erster Job Dateien vom selbst gehosteten Agenten kopiert, der als Docker-Container gestartet wird

Die gehostete Pipeline wird mit der Rest-API "run" der Pipeline ausgelöst:
https://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run%20pipeline?view=azure-devops-rest-6.0

So sieht der Körper jetzt aus:

"resources": {
        "repositories:": {
            "self": {
                "refName": "refs/heads/my_branch"
            }
        }
    }

es funktioniert super.
Jetzt sieht der Teil der gehosteten Pipeline folgendermaßen aus:

- job: self_hosted_connect
  timeoutInMinutes: 10
  pool: Default
  steps:
  - task: CopyFiles@2
    inputs:
      SourceFolder: '/home/copy_dir'
      Contents: '**'
      TargetFolder: '$(build.artifactstagingdirectory)'

auch gut arbeiten.

Meine Fragen sind:

  1. Ich möchte in der Rest-API "run" einen weiteren Parameter senden, der den SourceFolder-Pfad enthält, damit die CopyFiles-Task dynamisch ist und keinen Hardcode-SourceFolder-Pfad hat

  2. Wie kann ich den selbst gehosteten Agenten anweisen, das Verzeichnis außerhalb seines Arbeitsverzeichnisses einzuschließen, wenn ich den selbst gehosteten Agenten über Docker ausführe? Die Pipeline wird also nicht mit dem Fehler ausfallen:

    # [Fehler] Nicht behandelt: Nicht gefunden SourceFolder: / home / copy_dir

UPDATE Ich habe die Anfrage aktualisiert auf:

{
    "resources": {
        "repositories:": {
            "self": {
                "refName": "refs/heads/my_branch"
            }
        }
    },
    "templateParameters": {
        "Folderpath":"{/home/foo/my_dir}"
    }
}

aber ich bekomme eine Fehlermeldung:

{
    "$id": "1",
    "innerException": null,
    "message": "Unexpected parameter 'Folderpath'",
    "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
    "typeKey": "PipelineValidationException",
    "errorCode": 0,
    "eventId": 3000
}

Antworten

1 VitoLiu-MSFT Sep 04 2020 at 15:06

Senden Sie in der Rest-API "run" einen weiteren Parameter, der den SourceFolder-Pfad enthält. Wir können Laufzeitparameter in der Pipeline verwenden.

YAML-Beispiel:

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 anfordern:

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

Anfragetext:

{
    "resources":{
        "repositories":{
            "self":{"refName":"refs/heads/{my_branch}"
            }
         }
    },
    "templateParameters": {
        "Folderpath":"{SourceFolder path}"
        }
}

Wie kann ich den selbst gehosteten Agenten anweisen, das Verzeichnis außerhalb seines Arbeitsverzeichnisses einzuschließen?

Wir können die vordefinierten Variablen des lokalen Ordners oder von Azure DevOps kopieren, um den Quellordner zu definieren.

Update1

Wir sollten den Parameter im YAML-Build definieren. Wenn nicht, wird der Fehler "Unerwarteter Parameter 'Ordnerpfad'" angezeigt.

UPDATE 2

Da ich es gerne vom realen Pfad (dem Pfad, den ich in der Anfrage übergebe) auf der CD nehme, auf der der selbst gehostete Docker ausgeführt wird, und nicht relativ zum Docker-Arbeitsverzeichnis, gibt es mir jetzt diesen Fehler:

[error]Unhandled: Not found SourceFolder: /azp/agent/_work/1/s/{/home/copy_dir}  
 

Dabei ist / azp das Docker-Arbeitsverzeichnis

Ich habe Docker über diesen Link konfiguriert:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops