我有以下 Azure Pipelines 作业:
- stage: Production
dependsOn: Test
jobs:
- job: Publish
pool:
vmImage: 'Ubuntu 16.04'
steps:
- task: UseDotNet@2
displayName: Setup
inputs:
packageType: sdk
version: 3.1.x
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: false
projects: 'src/**/*.csproj'
arguments: '--configuration production --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
- task: PublishPipelineArtifact@0
displayName: Export
inputs:
artifactName: Production
targetPath: '$(Build.ArtifactStagingDirectory)'
- deployment: Deploy
dependsOn: Publish
pool:
vmImage: Ubuntu-16.04
environment: Production
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@1
displayName: Import
inputs:
artifactName: Production
- …Run Code Online (Sandbox Code Playgroud) 在模板管道中,您不能放置任何触发器语句,例如trigger: noneMicrosoft文档中指定的禁用 ci 触发器,所以我想知道您如何防止每次更新这些管道或同一分支中的任何其他 yaml 文件时执行这些管道?
azure-devops azure-pipelines azure-pipelines-yaml azure-yaml-pipelines azure-devops-pipelines
我试图排除一些项目在天蓝色管道中构建。
我尝试了以下选项...
- script: dotnet build **/Core/*.csproj --configuration $(buildConfiguration)
Run Code Online (Sandbox Code Playgroud)
和
- script: dotnet build **/Core/**/*.csproj --configuration $(buildConfiguration)
Run Code Online (Sandbox Code Playgroud)
但找不到好的例子。
我想要构建的项目位于不同的子文件夹下,如../../Core/Domain/Domain.csproj 和 ../../Core/Presentation/Presentation.csproj
有什么我想念的吗,有可能吗?或者我只是做错了什么。
yaml azure azure-devops azure-pipelines azure-pipelines-yaml
我们如何添加自定义注释标记master,一旦引入请求(PR)完成后,会自动?
更多背景:
azure-pipelines.ymlmaster强制使用 PR 的分支策略MAJOR。MINOR。PATCH”MAJOR。MINOR”MAJOR”引脚上MAJOR唯一的例子:
resources:
repositories:
- repository: templates
type: git
name: template_devops_pipelines
ref: "refs/tags/v1"
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 azure 管道,该管道在特定分支中的更改时触发但排除其他分支。示例场景是,我有多个分支,例如dev, test,beta分支。所以我在我的azure-pipelines.yml
trigger:
branches:
include:
- dev
exclude:
- test
- beta
Run Code Online (Sandbox Code Playgroud)
它工作正常,它dev在我的 azure devops 中触发了 CI 构建。但问题是,在我切换到机器上的其他分支后,假设test我更新了azure-pipelines.yml这样的内容:
trigger:
branches:
include:
- test
exclude:
- dev
- beta
Run Code Online (Sandbox Code Playgroud)
并将其推送到原点,CI fortest和devare trigger 并且它们的分支标记在test分支中。这是错误的,因为dev不应包含或触发CI 。
我还确保每个 CI 构建都使用azure-pipelines.yml指定给特定分支的那个。这就是为什么我不知道为什么它不能正常工作。
我正在尝试在我的代理池中分配一个特定的代理,但我不知道该怎么做。有人知道吗?
我试过这个但不起作用:
- stage: Deploy
pool: alm-aws-pool
agent.name: deploy-05-agent1
Run Code Online (Sandbox Code Playgroud) azure azure-devops azure-pipelines azure-pipelines-release-task azure-pipelines-yaml
假设我在 Azure 上有 3 个环境:Dev、Test 和 Prod。我有相同的管道来为每个环境构建和部署资源和代码,但有两个不同之处:
这种情况的正确方法是什么?因为我想到了至少 3 个,没有一个是完美的:
选项 1:我想我可以在 Azure DevOps 上创建单个管道(由 3 个分支中的任何一个触发),每个环境有 3 个阶段,并为每个阶段添加一个根据源分支运行的条件,如下所示:
condition: eq(variables['Build.SourceBranch'], 'refs/heads/a-branch-name')
并在每个阶段引用不同的变量。但这会在每个阶段引入代码重复 - 在添加或修改步骤时,我必须记住编辑 3 个阶段 - 不可取。
选项 2:在我的存储库中创建 3 个单独的 YAML 文件,每个文件都具有指定的触发器分支并引用相同的变量名称,然后在 Azure DevOps 上创建 3 个不同的管道,每个管道具有不同的变量值。但这也会引入代码重复。
选项 3:build-and-deploy.yaml使用其中定义的步骤创建 1 个文件作为模板,然后创建另外 3 个引用该模板的 YAML 文件,每个文件在每个 Azure Pipeline 中都有不同的触发器分支和不同的变量值,如下所示:
trigger:
branches:
include:
- a-branch-name
steps:
- template: build-and-deploy.yaml
parameters:
parameterName1: $(parameterValue1)
parameterName2: $(parameterValue2)
Run Code Online (Sandbox Code Playgroud)
这似乎是最好的选择,但我没有看到它在示例中的任何地方使用过,所以也许我只是不知道它的缺点,如果有的话。
yaml continuous-deployment azure-devops azure-pipelines azure-pipelines-yaml
我有一个自托管代理。它用作一种部署代理。我们软件的所有发行版本均由该代理构建,然后复制到网络位置。
问题:有没有办法可以在管道中同时利用“azure-pipelines”Microsoft 托管池和我自己的自托管池中的代理?
编辑
不幸的是,目前这是不可能的。这就是为什么您应该对功能请求进行投票: https://developercommunity.visualstudio.com/t/allow-agent-pools-to-contain-microsoft-hosted-and/396893
Docker 卷安装在 Azure DevOps Pipeline 中不起作用,请在下面找到我的代码:
\n我尝试了两种方法在管道中运行我的 docker 容器 - 请参阅下面 - 都返回空卷 - 卷安装没有发生。我不确定我在这里犯了什么错误。如果有人能帮助我解决这个问题,我将不胜感激。
\n我想将run.sh、test.sh 和 test.txt挂载在/test下
\n在entrypoint.sh中- 我列出了docker内的所有文件 - 但它返回空 - 未安装所有这些文件run.sh、test.sh 和 test.txt
\n在过去的两天里,我一直在努力解决这个问题,但没有得到任何解决方案 - 任何帮助将不胜感激。
\n这是我的文件夹结构:
\nmy-app/\n\xe2\x94\x9c\xe2\x94\x80 test/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 run.sh\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 test.sh\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 test.txt\n\xe2\x94\x9c\xe2\x94\x80 azure-pipeline.yml\nRun Code Online (Sandbox Code Playgroud)\n测试文件
\n#!/bin/bash\n\nrootPath=$1\necho "Root path: $rootPath"\n./run.sh $rootPath\nRun Code Online (Sandbox Code Playgroud)\n运行sh
\n#!/bin/bash\n\necho "starting run script"\n\nNAME="testApp"\nIMAGE="sample/test-app:1.1"\nROOTPATH=$1\n\necho "$ROOTPATH"\n# Finally run\ndocker stop $NAME > /dev/null 2>&1\ndocker rm $NAME > /dev/null 2>&1\ndocker run …Run Code Online (Sandbox Code Playgroud) 我正在尝试基于运行 Azure DevOps Server 2020 的提交消息片段在管道中插入额外的参数。我尝试使用以下代码来实现它,但没有成功:
variables:
- name: commitMessage
value: $(Build.SourceVersionMessage)
steps:
- template: myTemplate.yaml
parameters:
${{ if contains(variables['commitMessage'], 'SPECIAL_MESSAGE') }}:
specialParam: 'someValue'
Run Code Online (Sandbox Code Playgroud)
在调查过程中,我发现这些表达式的表现有些出乎意料:
variables:
- name: commitMessage
value: $(Build.SourceVersionMessage)
steps:
- bash: |
echo "${{ variables['commitMessage'] }}"
echo "${{ contains(variables['commitMessage'], 'SPECIAL_MESSAGE') }}"
echo "${{ contains('test SPECIAL_MESSAGE', 'SPECIAL_MESSAGE') }}"
Run Code Online (Sandbox Code Playgroud)
脚本输出是:
test SPECIAL_MESSAGE
False
True
Run Code Online (Sandbox Code Playgroud)
脚本的第一行正确输出提交消息。但是contains()脚本第二行中的函数似乎无法处理该变量,即使提交消息包含 SPECIAL_MESSAGE,表达式也会返回False。
但是,如果我将变量设置为静态字符串而不是$(Build.SourceVersionMessage)变量,则表达式返回True,并且我可以添加额外的参数:
variables:
- name: commitMessage
value: 'test SPECIAL_MESSAGE'
Run Code Online (Sandbox Code Playgroud)
知道管道为什么会这样,或者如何让它工作吗?
azure-pipelines ×10
azure-devops ×9
azure ×3
yaml ×2
azure-pipelines-release-task ×1
docker ×1
git ×1