Необработанный: не найден mavenPOMFile - Azure конвейер DevOps для Java приложения функции - PullRequest
0 голосов
/ 30 апреля 2020

Я хотел бы создать конвейер, который развертывает Java Azure Функция, но не работает. Пожалуйста, посоветуйте мне. В качестве основы я следую учебному пособию, но вместо GitHub я использую Git Репо Azure DevOps. https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/java-function?view=azure-devops

Файл POM находится внутри zip-файла /pipelines-java-function-master/pom.xml

Моя ошибка:

 Starting: Maven
 ==============================================================================
 Task         : Maven
 Description  : Build, test, and deploy with Apache Maven
 Version      : 3.168.0
 Author       : Microsoft Corporation
 Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/maven
 ==============================================================================
 ##[error] Unhandled: Not found mavenPOMFile: /home/vsts/work/1/s/pom.xml
 Finishing: Maven

Мой YAML:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

# at the top of your YAML file 
# set some variables that you'll need when you deploy
variables:
  # the name of the service connection that you created above
  serviceConnectionToAzure: name-of-your-service-connection
  # the name of your web app here is the same one you used above
  # when you created the web app using the Azure CLI
  appName: JavaFuncApp

# ...

# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/java

steps:
- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'package'


    # ...
# add these as the last steps
# to deploy to your app service
- task: CopyFiles@2
  displayName: Copy Files
  inputs:
    SourceFolder: $(system.defaultworkingdirectory)/target/azure-functions/
    Contents: '**'
    TargetFolder: $(build.artifactstagingdirectory)   

- task: PublishBuildArtifacts@1
  displayName: Publish Artifact
  inputs:
    PathtoPublish: $(build.artifactstagingdirectory)    


- task: AzureWebApp@1
  inputs:
    azureSubscription: 'connection-to-MyTestRG-rg'
    appType: 'webApp'
    appName: '$(appName)'
    package: '$(System.DefaultWorkingDirectory)/pipelines-java-function-master.zip'
    deploymentMethod: 'auto'

Ответы [ 3 ]

1 голос
/ 01 мая 2020

Файл POM находится внутри zip-файла /pipelines-java-function-master/pom.xml

Это причина, по которой вы столкнулись с сообщением об ошибке Not found mavenPOMFile.

Для большинства задач имеется встроенный сценарий, который будет вызываться для извлечения архивного файла, как только наша система обнаружит, что в источнике существует один архивированный файл.

НО, для задачи Maven мы не предоставили в нее таких встроенных скриптов. В это время задача будет следовать обычному рабочему логику c, чтобы попытаться найти pom.xml - $(System.DefaultWokingDirectory).

Как вы сказали, pom.xml находится в файле zip . Поскольку zip не был извлечен, zip будет рассматриваться как файл вместо папка . Другими словами, pom.xml, кажется, никогда не существовало для задачи Maven. Тогда задача скажет вам, извините, мы не можем узнать pom.xml сейчас.


В зависимости от вашего сценария, вы должны запустить Извлечь файл задачу, чтобы сделать zip-файл распакованным до запуска Maven.

Ниже примера YAML-скрипта вы можете получить ссылку:

steps:
- task: ExtractFiles@1
  inputs:
    archiveFilePatterns: '*.zip'
    destinationFolder: '$(Build.SourcesDirectory)'
    cleanDestinationFolder: false

- task: Maven@3
  inputs:
    mavenPomFile: '$(System.DefaultWorkingDirectory)/{zip file name}/pipelines-java-function-master/pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'package'

Просто обратите внимание на значение mavenPomFile. Так как задача Extract file создаст папку с тем же именем и zip-файлом в рабочем каталоге, пожалуйста, настройте путь pom.xml с жестким кодом: $(System.DefaultWorkingDirectory)/{zip file name}/pipelines-java-function-master/pom.xml

1 голос
/ 30 апреля 2020

Попробуйте вызвать команду сборки Maven после копирования в промежуточный каталог. Примерно так же, как в примере ниже, поскольку сборка Maven выглядит как промежуточный каталог, а в вашем конвейере шаг копирования в промежуточный каталог выполняется сразу после шага сборки Maven:

# add these as the last steps
# to deploy to your app service
- task: CopyFiles@2
  displayName: Copy Files
  inputs:
    SourceFolder: $(system.defaultworkingdirectory)/target/azure-functions/
    Contents: '**'
    TargetFolder: $(build.artifactstagingdirectory)   

- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'package'
0 голосов
/ 06 мая 2020

У меня была такая же проблема. Вот как я решил проблему, так как из ошибки видно, что процесс не может найти pom. xml.

До: ------- шагов : - задача: Maven@3 входные данные: mavenPomFile: 'pom. xml'

После: ------ шаги: - задача: Maven@3 входные данные: mavenPomFile: '/pom.xml'

В моем случае имя проекта было azure -fun-demo , поэтому mavenPomFile будет иметь значение ' azure -fun- демо / П. xml .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...