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: '$(Build.ArtifactStagingDirectory)'
# contents: '*'
targetFolder: '~/_work/'
readyTimeout: '20000'
# overWrite: true
displayName: 'Copy JAR to host ${{variables.endpoint}}'
# - tarea: SSH@0
# entradas:
# sshEndpoint: ${{variables.endpoint}}
# runOptions: 'commands'
# commands: 'execute service'
# readyTimeout: '200'
# displayName: 'Run service'
# - tarea: DeleteFiles@1
# entradas:
# sourceFolder: '${Pipeline.Workspace)\Binaries'
# contents: '*'
# removeSourceFolder: true
# displayName: 'Clear JAR file from pipeline downloads: After'
davy.ai
El problema parece estar relacionado con la tarea
CopyFilesOverSSH
en el archivodeploy.yml
. Específicamente, el parámetrosourceFolder
se establece en$(Build.ArtifactStagingDirectory)
, pero el parámetroContents
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í: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.