Azure JAVA Functions + DevOps pipeline for different environment
Azure JAVA Functions + DevOps pipeline for different environment
我在 JAVA 中有 Azure Functions 项目。不幸的是,java 没有得到很好的支持)-: 所以,一切都“有点”不同。那么,您能否指点我参考示例或文档,了解如何将用 java 编写的函数项目部署到 azure?因为我想要的只是问题的一部分 - 而且这些部分不适合在一起)-:
- java 使用 azure-function-maven-plugin(它是 func 核心工具的包装器)
- 此插件准备了 stagging 文件夹,该文件夹被压缩为 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 函数资源 - 它会失败。
是的。我确实手动准备了包(使用 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 函数名和包名不同。但它可以成功部署到 Azure Functions。
我在 JAVA 中有 Azure Functions 项目。不幸的是,java 没有得到很好的支持)-: 所以,一切都“有点”不同。那么,您能否指点我参考示例或文档,了解如何将用 java 编写的函数项目部署到 azure?因为我想要的只是问题的一部分 - 而且这些部分不适合在一起)-:
- java 使用 azure-function-maven-plugin(它是 func 核心工具的包装器)
- 此插件准备了 stagging 文件夹,该文件夹被压缩为 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 函数资源 - 它会失败。
是的。我确实手动准备了包(使用 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 函数名和包名不同。但它可以成功部署到 Azure Functions。