java - 适用于不同环境的 Azure JAVA 函数 + DevOps 管道

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

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

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

不可能构建独立的包(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 函数资源 - 则会失败。

最佳答案

是的。我确实手动准备了包(使用发布构建工件任务。)

我想分享我将 Java Function Package 部署到 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

结果:

enter image description here

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

关于java - 适用于不同环境的 Azure JAVA 函数 + DevOps 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64279410/

相关文章:

java - Java 项目的构建和版本编号(ant、cvs、hudson)

asp.net - 我是否需要将 Azure 媒体服务和播放器用于纯音频应用程序

git - 使用GitVersion生成Docker镜像标签

Azure DevOps-部署组-使目标虚拟机联机

node.js - Azure DevOps 自托管代理报告 NPM 版本错误

java - 从命令行使用 JAR 保持 JVM 运行

java - Thymeleaf 构造对象

SQL Azure : Executing SQL directly; no cursor

java - 如何用eclipse分析MAT

azure - 无法连接到在 Azure VM 上运行的我的网站