es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Azure DevOps no puede encontrar archivo(s) en el pipeline para copiar a la máquina remota.

Estoy luchando con un pipeline yml en Azure Devops. He creado los archivos stage.yml, build.yml y deploy.yml. El archivo stage.yml es bastante sencillo, tiene dos etapas y te dirige a build.yml o deploy.yml.

El deploy.yml debería recoger el resultado del artefacto de build.yml y copiarlo con SSH a mi entorno remoto. Azure muestra el artefacto como resultado de la primera etapa, por lo que eso funciona. Sin embargo, cada vez que ejecuto el trabajo, muestra este mensaje en la salida:

Starting: Copy JAR to host deploy

Tarea: Copiar archivos sobre SSH
Descripción: Copiar archivos o artefactos de construcción a una máquina remota sobre SSH
Versión: 0.189.0
Autor: Microsoft Corporation

Ayuda: https://learn.microsoft.com/azure/devops/pipelines/tasks/deploy/copy-files-over-ssh

Configurando la conexión de servicio SSH al host remoto xx.xx.xx.xx.
Se encontraron 0 archivos para copiar a la máquina remota.
Se han completado la copia de 0 archivos a la máquina remota.
Finalizando: Copiar JAR al host deploy

¿Falta algo en mi configuración o es solo que las rutas están mal configuradas? Si es así, ¿cómo debería configurarse?

Mi build.yml se ve así:

parámetros:
- nombre: incomingFeedName
  tipo: cadena
  predeterminado: 'project'

trabajos:
- trabajo: build_maven
  displayName: Build
  piscina:
    vmImage: ubuntu-latest

variables:
    - nombre: MAVEN_CACHE_FOLDER
      valor: $(Pipeline.Workspace)/.m2/repository
    - nombre: MAVEN_OPTS
      valor: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'

pasos:
  - tarea: Cache@2
    # Esta tarea crea una caché de todas sus dependencias para acelerar la construcción para la próxima vez
    # https://learn.microsoft.com/en-us/azure/devops/pipelines/caching/?view=azure-devops
    entradas:
      clave: 'maven4 | "$(Agent.OS)" | /pom.xml,!/target/**/pom.xml'
      restoreKeys: |
        maven4 | "$(Agent.OS)"
        maven4
      ruta: $(MAVEN_CACHE_FOLDER)
    displayName: 'Cache local maven repo'

- tarea: MavenAuthenticate@0

  # Esta tarea autenticará su feed de maven para las dependencias de entrada y salida
  entradas:
  artifactsFeeds: ${{parameters.incomingFeedName}}
displayName: 'Authenticate to Azure Maven feed'

- tarea: Maven@3
inputs:
  mavenPomFile: 'pom.xml'
  mavenOptions: '-Xmx3072m $(MAVEN_OPTS)'
  javaHomeOption: 'JDKVersion'
  jdkVersionOption: '11'
  jdkArchitectureOption: 'x64'
  publishJUnitResults: true
  testResultsFiles: '<em>*/surefire-reports/TEST-</em>.xml'
  mavenVersionOption: 'Default'
  mavenAuthenticateFeed: false
  goals: 'deploy'
displayName: 'Maven build'

- tarea: CopyFiles@2

  # recoger los resultados de la construcción (archivo JAR) y agruparlos.
  entradas:
  SourceFolder: '$(System.DefaultWorkingDirectory)/target'
  Contents: '*.jar'
  TargetFolder: '$(Build.ArtifactStagingDirectory)'
displayName: Stage Jar files for publishing

- tarea: PublishPipelineArtifact@1

  # Sube los resultados al pipeline. Estos archivos se pueden utilizar en el pipeline de lanzamiento.
  entradas:
  targetPath: '$(Build.ArtifactStagingDirectory)'
  artifact: 'Binaries'
  publishLocation: 'pipeline'
displayName: Publish Jar file

Y el deploy.yml:

parámetros:
- nombre: envName
  tipo: cadena

trabajos:
- deployment: deploy_jar
  displayName: Deploy JAR
  environment: ${{ parameters.envName }}
  variables:
  # - group: 'global'
  - nombre: 'endpoint'
    ${{ if eq(parameters.envName, 'Test') }}:
      valor: 'deploy'
  # pool:
  #  name: 'poolname here'
  estrategia:
    runOnce:
      deploy:
        pasos:
          # - tarea: DeleteFiles@1
          #   entradas:
          #     sourceFolder: '${Pipeline.Workspace)\Binaries'
          #     contents: '*'
          #     removeSourceFolder: true
          #   displayName: 'Clear JAR file from pipeline downloads: Before'
          # - descargar: current
          #   artefacto: Binaries

          - tarea: CopyFilesOverSSH@0
            entradas:
              sshEndpoint: ${{variables.endpoint}}
              sourceFolder: &#39;$(Build.ArtifactStagingDirectory)&#39;
              # contents: &#39;*&#39;
              targetFolder: &#39;~/_work/&#39;
              readyTimeout: &#39;20000&#39;
              # overWrite: true
            displayName: &#39;Copy JAR to host ${{variables.endpoint}}&#39;

          # - tarea: SSH@0
          #   entradas:
          #     sshEndpoint: ${{variables.endpoint}}
          #     runOptions: &#39;commands&#39;
          #     commands: &#39;execute service&#39;
          #     readyTimeout: &#39;200&#39;
          #   displayName: &#39;Run service&#39;

          # - tarea: DeleteFiles@1
          #   entradas:
          #     sourceFolder: &#39;${Pipeline.Workspace)\Binaries&#39;
          #     contents: &#39;*&#39;
          #     removeSourceFolder: true
          #   displayName: &#39;Clear JAR file from pipeline downloads: After&#39;
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la tarea CopyFilesOverSSH en el archivo deploy.yml. Específicamente, el parámetro sourceFolder se establece en $(Build.ArtifactStagingDirectory), pero el parámetro Contents no se establece, lo que significa que no se están copiando archivos.

    Para solucionar este problema, establezca el parámetro Contents en **/*.jar para garantizar que se copien todos los archivos JAR en el directorio de preparación del artefacto a la máquina remota.

    La tarea actualizada de CopyFilesOverSSH debería verse así:

    - task: CopyFilesOverSSH@0
      inputs:
        sshEndpoint: ${{variables.endpoint}}
        sourceFolder: '$(Build.ArtifactStagingDirectory)'
        Contents: '**/*.jar'
        targetFolder: '~/_work/'
        readyTimeout: '20000'
      displayName: 'Copiar JAR al host ${{variables.endpoint}}'
    

    Además, asegúrese de que el punto de conexión SSH esté configurado correctamente y tenga los permisos necesarios para copiar archivos a la máquina remota.

Comments are closed.