【问题标题】:Azure JAVA Functions + DevOps pipeline for different environment适用于不同环境的 Azure JAVA Functions + DevOps 管道
【发布时间】:2020-10-09 11:44:49
【问题描述】:

我在 JAVA 中有 Azure Function 项目。不幸的是,java 并没有得到很好的支持)-:所以,一切都“有点”不同。那么,您能否指出我参考示例或文档如何将用 java 编写的函数项目部署到 azure?因为我想要的只是问题的一部分——而且这些部分不适合)——:

  • java 使用 azure-function-maven-plugin(它是 func 核心工具的包装器)
  • 此插件准备临时文件夹,该文件夹被压缩为 ZIP 并部署为“包”
  • 不幸的是,这个临时文件夹是根据函数名命名的。因此,ZIP 包取决于目标 azure RESOURCE 名称。

不可能构建独立包(ZIP)并将其部署到几个不同的环境(stages/dev/test/prod)。或者是吗?

使用 CI/CD 管道时尤其奇怪。一个 BUILD 管道和多个 DEPLOY 管道是不可能的。因为必须根据目标部署名称来命名构建(内部目录) - 所以不是独立的。这违背了每个环境都有一个构建和多个配置的基本原则。

知道如何在不构建多个构建的情况下解决它吗?谢谢。

编辑: maven "mvn package (+azure-function:package)" 用目录准备构建

${projectRoot}/target/azure-functions/${functionResourceName}/...

在哪里

/... 

被压缩成最终的 azure 包,名为:${functionResourceName}.zip

所以,“functionResourceName”只是在 ZIP 文件的名称中(+ 包含同名的 jar)。但是……

...如果您尝试将此 ZIP 部署到具有 另一个 名称的 azure 函数资源 - 它会失败。

【问题讨论】:

  • 您是否考虑过为此使用 Quarkus?有一个指南可以帮助您完成所有相关步骤:quarkus.io/guides/azure-functions-http
  • 哇,谢谢。我确信 MS 功能不支持 quarkus 运行时。我会检查的。
  • 你的意思是文件夹名不能满足你的要求吗?当我运行 azure java function 时,它会生成 azure function 文件夹。我按照this blog中的步骤操作。可以分享一些关于包结构的截图吗?也可以分享一下理想状态。
  • 根据我的测试,我尝试使用相同的 mvn 命令,并且可以将 zip 文件部署到 azure 函数。我用的是Auzre App Service Deploy任务,虽然functionappname不同,但是部署成功。能否请您分享您的部署方法。
  • 我尝试使用 mvn azure-functions:deploy。因此,您手动准备了您的包(ZIP)(如链接博客中所述) - 而不是 maven 目标。 ...我现在检查了一下,ZIP 包不是由 azure-functions:package 目标创建的,正如我所想。在我看来这是一个错误。此 zip 由部署目标创建。这让我很困惑。我想它会起作用 - 将其发布为 SO 答案,我会接受它。谢谢。

标签: java azure azure-devops azure-functions azure-functions-core-tools


【解决方案1】:

是的。我确实手动准备了包(使用 Publish Build Artifacts Task。)

我想分享我将 Java 函数包部署到 Azure Function 的步骤。

这是我的步骤:

在构建管道中:

steps:
- task: Maven@3
  displayName: 'Maven pom.xml'
  inputs:
    mavenPomFile: '$(Parameters.mavenPOMFile)'
    options: 'azure-functions:package'

- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    Contents: '**/azure-functions/**'
    TargetFolder: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

- task: ArchiveFiles@2
  displayName: 'Archive $(Build.ArtifactStagingDirectory)/target/azure-functions/kishazureappfunction'
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/target/azure-functions/kishazureappfunction'
    includeRootFolder: false

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

在发布管道中:

我使用Azure App Service Deploy Task。 (为清楚起见,我将其转换为 yaml 格式)

- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy: kevin1014'
  inputs:
    azureSubscription: kevintest
    appType: functionApp
    WebAppName: kevin1014
    packageForLinux: '$(System.DefaultWorkingDirectory)/_123-Maven-CI/drop/1.zip'
    enableCustomDeployment: true
    DeploymentType: runFromZip

结果:

azure 函数名和包名不同。但可以成功部署到 Azure Function。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2023-02-04
    • 2021-07-03
    • 2020-09-06
    相关资源
    最近更新 更多