适用于不同环境的Azure JAVA功能+ DevOps管道

时间:2020-10-09 11:44:49

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

我在JAVA中有Azure Function项目。不幸的是,对Java的支持不是很好):-因此,所有内容都有一点“不同”。因此,您能指出我参考示例还是文档,说明如何将用Java编写的功能项目部署到Azure中?由于我想要的全部仅显示问题的一部分-且部分无法完全融合在一起)-:

  • java使用azure-function-maven-plugin(func核心工具的包装器)
  • 此插件将准备stagging文件夹,该文件夹将压缩为ZIP并作为“包”进行部署
  • 不幸的是,该标记文件夹是根据函数名称命名的。因此,ZIP程序包取决于目标天蓝色资源名称。

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

当您使用CI / CD管道时,它尤其令人不适。不可能有一个BUILD管道,而要有多个DEPLOY管道。因为该构建必须基于目标部署名称进行命名(内部目录)-所以不是独立的。与每个环境具有一个构建和多个配置的基本原理背道而驰。

任何想法如何在不构建多个版本的情况下解决它?谢谢。

编辑: maven“ mvn软件包(+ azure-function:package)”准备使用目录构建

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

其中

/... 

被压缩为最终的天蓝色包,名为:$ {functionResourceName} .zip

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

...如果尝试将此ZIP部署到具有另一个名称的Azure功能资源-它将失败。

1 个答案:

答案 0 :(得分:1)

是的。我确实确实手动准备了该程序包(使用“发布生成工件”任务。)

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

这是我的步骤:

在构建管道中:

/packages/native/package.json

在发布管道中:

我使用GitHub repo。 (为清楚起见,我将其转换为yaml格式)

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()

结果:

nativescript-vue-cli-plugin

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