我有一个天蓝色的管道并使用参数运行,其中有多个选项,如下所示:
选择测试执行
如果我选择Product,则执行product.js文件,如果选择,Product with Cost则执行"productCost.js",依此类推。我编写了一个天蓝色管道脚本来执行此操作。我有另一个条件"Generate Test Data"复选框,它返回布尔值true,或者false如果该值是true,那么我必须选择一个文件productWithTestData.js(如果Product选择)-我不知道如何在Azure管道代码中编写if else条件。请找到我的伪代码
有人可以帮助我如何为我的用例编写 if else 条件 - 提前感谢您的帮助!谢谢!
variables:
- name: fileName
${{ if eq(parameters.selectTestRun, 'Product') }}:
value: 'product.js'
else ${{ if eq(parameters.selectTestRun, 'Product') } && { if eq(parameters.testData, True) }}:
value: 'productWithTestData.js'
Run Code Online (Sandbox Code Playgroud)
我的管道代码:
trigger:
none
parameters:
- name: selectTestRun
displayName: Select test execution
type: string
default: Product
values: …Run Code Online (Sandbox Code Playgroud) 我正在尝试循环访问 Azure DevOps YAML 管道中的用户定义变量。
变量已通过 UI 创建:
在我正在使用的 YAML 管道代码下方:
trigger:
- dev
- main
pr:
- dev
pool:
vmImage: ubuntu-latest
stages:
- stage:
jobs:
- job: TestVars
steps:
- ${{ each var in variables }}:
- script: |
echo ${{ var.key }}
echo ${{ var.value }}
displayName: ${{ var.key }}
Run Code Online (Sandbox Code Playgroud)
当运行上述管道时,仅列出系统和构建变量(例如system、system.hostType、build.queuedBy等)。
任何循环用户定义变量的帮助将不胜感激。
我有一个包含 Dockerfile 和其他代码的存储库。无论发生什么变化,我们都希望运行某些步骤,但只想在发生变化docker build时运行作业。**/Dockerfile
我已经查看了条件文档和表达式文档,但我不清楚如何(如果可能的话)如何组合这些文档或以其他方式实现所需的结果。
我意识到在bash(例如git rev-list...和git diff --name-only <previous_commit>..HEAD | grep <pattern>)中这是可能的,但这有点麻烦,并且它仍然在 Azure Pipelines 中显示作业已运行,只是短路了。理想情况下,它会(适当地)表明该作业被全部跳过。
我还意识到 Docker 部分和代码部分可以位于具有单独构建触发器的单独存储库中,但如果可能的话,希望将它们放在同一个存储库中。
我有一个多阶段管道 YAML 部署到不同的环境(PreDev-Dev-QA-Stage-Prod),我正在尝试实施回滚策略以回滚到以前的版本或以前的构建工件,并且正在查看此页面https:// /learn.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops但无法弄清楚,也没有找到任何示例。任何帮助表示赞赏
我在多阶段管道中有一个矩阵,它生成作业并签出到不同的 git 存储库并进行提交。
该矩阵将存储库名称作为值,我想在checkout任务期间引用它。但是,由于在运行时评估变量,我不断收到错误。
即矩阵
matrix:
repo_foo:
repo: foo
repo_bar:
repo: bar
Run Code Online (Sandbox Code Playgroud)
我想做一些类似的事情
steps:
- checkout: $[ variables['repo'] ]
Run Code Online (Sandbox Code Playgroud)
但这些不会被评估并在管道启动之前抛出错误。同样,使用${{ variables['repo'] }}也会失败,因为它在编译时进行评估,从而变成空字符串。
我已将潜在的存储库定义为管道 yaml 中的资源,并尝试将完整的 git 路径作为变量值传递。
我还有其他方法可以做到这一点吗?
azure azure-devops azure-pipelines azure-pipelines-tasks azure-pipelines-yaml
目前,我的 YAML 管道和应用程序的源代码位于两个不同的分支中。
我试图找到证据证明正在检查的确实是源代码的分支,而不是我的管道的分支。
我看到末尾的签出调用git fetch是针对特定的提交,而不是针对指定的分支名称。
这是我的资源定义:
resources:
repositories:
- repository: RepoName
type: git
name: 'MyRepository' # repository in Azure DevOps
trigger:
branches:
include:
- UAT
Run Code Online (Sandbox Code Playgroud)
在我的一个步骤中,我做了一个checkout: RepoName.
我本来期待git checkout UAT在拉出源代码后,但正如所说,我看到了特定提交的签出。
我如何确定正在检查哪个分支?
我有一个用例,我想在 yaml 管道中使用用户名和密码的管道参数。对于用户名来说很简单,因为我只需在参数部分添加以下内容。
parameters:
- name: Username
type: string
displayName: Username(Email)
Run Code Online (Sandbox Code Playgroud)
我还想使用密码作为管道参数,但我还没有找到将其声明为秘密的方法。有没有办法像变量一样使用管道参数作为秘密?到目前为止,我找到了一个解决方法,将一个变量声明为秘密,并在每次运行之前更新该变量。但这不是最好的体验。也许我错过了文档中的某些内容?
如果它像下面的代码一样工作那就太棒了:
parameters:
- name: Username
type: string
displayName: Username(Email)
- name: Password
type: secret
displayName: Password
Run Code Online (Sandbox Code Playgroud) 我尝试使用or表达式在模板上定义布尔值,如下所示:
parameters:
- name: A
default: true
- name: B
default: false
stages:
- template: bacon.yml@template
parameters:
booleanParameter: or(eq(${{ parameters.A }}, true), eq(${{ parameters.B}}, true))
Run Code Online (Sandbox Code Playgroud)
在我看来,它应该工作得很好,但我不断收到同样的错误:
The 'booleanParameter' parameter value 'or(eq(True, true), eq(False, true))' is not a valid Boolean.
Run Code Online (Sandbox Code Playgroud)
我尝试了一些语法的小变化,所有这些都会导致相同的错误。
我在这里缺少什么?
最近正在研究 Azure DevOps 模板。并遇到了这种双花括号语法。只是想知道如何在 Azure DevOps 中使用双花括号。
看过一些关于相同内容的帖子。
可以说,我在组中定义了一个变量,如下所示。
我们还可以在 yaml 文件中定义变量,如下所示。
variables:
- name: BuildConfiguration
value: 'Release'
- name: finalBuildArtifactName
value: 'TempFolderName'
Run Code Online (Sandbox Code Playgroud)
什么时候应该使用双大括号语法?
我有关于并使用以下方法来引用变量的想法。
与上述两个相比,我们可以用双花括号完成什么?
让 yaml 管道中的东西正常工作非常困难。进行更改、签入、运行管道、查看结果并再次返回。这非常耗时,而且至少可以说并不顺利。
在数据库项目构建和发布管道中使用 Azure DevOps YAML
这段代码正确地获取了我的四个 dacpac 文件,我可以看到这些文件被复制到控制台中
- task: CopyFiles@2
displayName: Copy build output to artifacts staging
inputs:
SourceFolder: "$(Build.SourcesDirectory)"
flattenFolders: true
Contents: '**\bin\**\*.dacpac'
TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)
这段代码正确地获取了我的发布文件,我可以看到这些文件正在控制台中复制
- task: CopyFiles@2
displayName: Copy build output to artifacts staging
inputs:
SourceFolder: "$(Build.SourcesDirectory)"
flattenFolders: true
Contents: '**\PublishProfile\*.publish.xml'
TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)
这段代码报告“找到零个文件”
- task: CopyFiles@2
displayName: Copy build output to artifacts staging
inputs:
SourceFolder: "$(Build.SourcesDirectory)"
flattenFolders: true
Contents: |
'**\bin\**\*.dacpac'
'**\PublishProfile\*.publish.xml'
TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)
我还使用 Get-ChildItem 来双重确认这些文件是否存在。
好像| / 多行不能按描述工作。