首页 > 解决方案 > 适用于不同环境的 Azure JAVA Functions + DevOps 管道

问题描述

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

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

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

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

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

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

在哪里

/... 

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

因此,“functionResourceName”只是在 ZIP 文件的名称中(+ 包含同名的 jar)。但 ...

...如果您尝试将此 ZIP 部署到具有其他名称的天蓝色函数资源 - 它会失败。

标签: javaazureazure-devopsazure-functionsazure-functions-core-tools

解决方案


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

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

这是我的步骤:

在构建管道中:

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 Function。


推荐阅读