[英]how to build, package and deploy AWS SAM lambda function of python from azure Devops CI/CD pipeline to AWS
[英]Build and Deploy multiple azure function projects using YAML pipeline
我正在嘗試使用 YAML 管道在單個解決方案中構建和發布多個 azure function 項目,但是當我發布這些包時,它們會相互覆蓋,所以我只發布了最后一個構建的項目。
我使用這些步驟來構建:
- task: DotNetCoreCLI@2
displayName: 'Restore project dependencies'
inputs:
command: 'restore'
feedsToUse: 'config'
nugetConfigPath: Nuget.config
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build the project - $(configuration)'
inputs:
command: 'build'
arguments: '--no-restore --configuration $(configuration) -p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)\Functions" -p:ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)\Artifacts"'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Publish the project - $(configuration)'
inputs:
command: 'publish'
projects: '**/*Functions.csproj'
publishWebProjects: false
arguments: '--no-build --configuration $(configuration) --output $(Build.ArtifactStagingDirectory)\Functions'
zipAfterPublish: true
modifyOutputPath: true
- publish: '$(Build.ArtifactStagingDirectory)\Functions'
displayName: 'Publish drop'
artifact: functions
有沒有辦法按項目發布功能? 我嘗試了 VSBuild 任務來構建解決方案,但是當嘗試使用 AzureFunctionApp 任務部署到 Azure 時,它錯誤地指出 msBuild 包不受支持。
歡迎任何建議!
有沒有辦法按項目發布功能?
根據您的描述,您在一個解決方案文件中有多個項目。
據我所知,在 Do.net Publish 任務中,您可以設置publishWebProjects: false
。 然后功能將按項目發布。
你可以參考我的示例:
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '**/*.csproj'
arguments: '--no-restore --configuration $(configuration) -p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)\Functions" -p:ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)\Artifacts"'
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: false
projects: '**/*.csproj'
arguments: '--no-build --configuration $(configuration) --output $(Build.ArtifactStagingDirectory)/Functions'
zipAfterPublish: True
continueOnError: true
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: ' $(build.artifactstagingdirectory)'
condition: succeededOrFailed()
結果:
我想出了一個適合我的模式。 我沒有嘗試僅通過一項任務發布我的解決方案中的所有項目,而是將它們拆分並為每個項目分配了自己的任務。 所以我從這個開始:
- task: DotNetCoreCLI@2
displayName: 'Publish Functions'
inputs:
command: publish
projects: '**/*.Functions.csproj'
publishWebProjects: false
arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions'
modifyOutputPath: true
zipAfterPublish: true
對此:
- task: DotNetCoreCLI@2
displayName: 'Publish Project 1 Functions'
inputs:
command: publish
projects: '**/Project1.Functions.csproj'
publishWebProjects: false
arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions\Project1'
modifyOutputPath: true
zipAfterPublish: true
- task: DotNetCoreCLI@2
displayName: 'Publish Project2 Functions'
inputs:
command: publish
projects: '**/Project2.Functions.csproj'
publishWebProjects: false
arguments: '--no-build --configuration ${{ variables.configuration }} -o $(Build.ArtifactStagingDirectory)\Functions\Project2'
modifyOutputPath: true
zipAfterPublish: true
我保留了模板的 rest 與原始帖子中的相同。
感謝所有的幫助。
您可以使用artifact.upload日志命令從單個腳本步驟上傳多個工件,而不是發布管道工件任務:
上傳:上傳工件
##vso[artifact.upload]local file path
用法
將本地文件上傳到文件容器文件夾,並可選擇將工件發布為
artifactname
。特性
containerfolder
= 文件將上傳到的文件夾,如果需要將創建文件夾。
artifactname
名稱 = 工件名稱。 (必需的)
- pwsh: |
Get-ChildItem -LiteralPath '$(Build.ArtifactStagingDirectory)\Functions' -Filter '*.zip' -File |
ForEach-Object {
'##vso[artifact.upload containerfolder={0};artifactname={0}]{1}' -f $_.BaseName, $_.FullName
}
displayName: Publish artifacts
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.