我有一个测试和生产环境。我使用 GitHub 分支进行部署。开发分支上的工件应部署到开发环境,生产工件应部署到生产环境。
实现此目的的一种方法是在开发和掌握上使用不同的 azure-pipeline.yml 文件。
- task: AzureFileCopy@4
displayName: 'copy spark jobs'
inputs:
sourcePath: $(workingDirectory)/transformed
azureSubscription: developSubscription
destination: azureBlob
storage: developStorageAccount
containerName: sourcecode
blobPrefix: myBlob
resourceGroup: developmentSourceGroup
我将在 master 分支上替换 azureSubscription、resourceGroup 和 prod 上存储的标识符。但这也意味着每次合并时,我都会冒用开发设置覆盖生产设置的风险。
所以我想知道是否有一种方法可以根据用于部署的分支来定义采用哪种设置?
最佳答案
这不是一个好方法。您应该尝试的是只有一个分支,并为测试和生产环境使用单独的阶段。对于生产阶段,使用过滤器允许仅从主分支进行部署。但在测试中,您也应该从开发和掌握进行部署。这是因为您需要在投入生产之前进行测试。想象一下,您不会注意到将代码合并到主分支时出现的问题,然后您将有另一个机会在测试环境中检测到它。
可能就像这样
stages:
- stage: Test
displayName: Test
condition: and(succeeded(), or(eq(variables['build.sourceBranch'], 'refs/heads/master'),eq(variables['build.sourceBranch'], 'refs/heads/develop'), eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.Reason'], 'Manual')))
jobs:
- deployment: Test
displayName: Test
environment: Test
workspace:
clean: all
strategy:
runOnce:
deploy:
steps:
- task: AzureFileCopy@4
displayName: 'copy spark jobs'
inputs:
sourcePath: $(workingDirectory)/transformed
azureSubscription: developSubscription
destination: azureBlob
storage: developStorageAccount
containerName: sourcecode
blobPrefix: myBlob
resourceGroup: developmentSourceGroup
- stage: Production
displayName: Production
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
jobs:
- deployment: Production
displayName: Production
environment: Production
workspace:
clean: all
strategy:
runOnce:
deploy:
steps:
- task: AzureFileCopy@4
displayName: 'copy spark jobs'
inputs:
sourcePath: $(workingDirectory)/transformed
azureSubscription: productionSubscription
destination: azureBlob
storage: productionStorageAccount
containerName: sourcecode
blobPrefix: myBlob
resourceGroup: productionSourceGroup
请注意,我使用了部署作业,如果您配置它们,它将为您提供实例批准。
关于azure - 如何使用 GitHub Branch 作为 Azure DevOps Pipelines 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73218940/