我有一个创建缓存的任务
- task: Cache@2
inputs:
key: 'sonarCache'
path: $(SONAR_CACHE)
cacheHitVar: CACHE_RESTORED
displayName: Cache Sonar packages
Run Code Online (Sandbox Code Playgroud)
但是,缓存已损坏。那么我如何运行这个管道,同时告诉它忽略任何现有的缓存?
由于某种原因,我无法更改缓存键sonarCache
pipeline azure azure-devops azure-pipelines azure-pipelines-yaml
我刚刚开始使用 Azure Pipelines 中的运行时参数,有些东西我不太明白。考虑这个 Azure Pipelines YAML:
parameters:
- name: deployEnvironment
displayName: Select your target environment.
type: string
default: Build_only
values:
- Build_only
- TST
- PP
- P
- name: releaseName
type: string
default: ''
steps:
- task: ....
Run Code Online (Sandbox Code Playgroud)
为什么 releaseName 是必需参数?我希望通过指定default: ''将其留空是可选的。文档没有提到是否可以将参数设为可选。
跟进 Kryzstof 的回答,我进一步试验,似乎只包含空格的字符串被解释为空:
似乎这个单个空格被解释为空(我也尝试过多个空格)。
parameters:
- name: myString
type: string
default: ' '
steps:
- task: PowerShell@2
inputs:
targetType: inline
script: |
$MS = $ENV:MS
Write-Host "myString value is '$MS'"
Write-Host "Its length is …Run Code Online (Sandbox Code Playgroud) 我已经运行了 Azure Pipeline。现在,我想仅当运行时某个条件成立时才执行一系列步骤。
例子
steps:
- template: steps_checkout.yml
# some more steps here
- bash: |
if [ some condition ]; then
echo "##vso[task.setVariable variable=rebuild_lib]false"
echo "Did set rebuild_lib to false"
fi
- if eq( variables.rebuild_lib, true) ):
- template: steps_lib_build.yml
Run Code Online (Sandbox Code Playgroud)
该行if eq( variables.rebuild_lib, true) )不起作用,因为它不是正确的条件语法。我可以用
${{ if eq( parameters.something, true ) }}
Run Code Online (Sandbox Code Playgroud)
但这需要在运行时知道。根据https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops
,表达式也可以$[ if eq(variables.rebuild_lib), true]在运行时进行评估,但是使用这个,我得到
Unexpected value '$[ if eq( variables.rebuild_lib, true) ) ]'
Run Code Online (Sandbox Code Playgroud)
似乎 yml 不能在运行时以这种方式修改。
那么我如何决定在运行时使用模板呢?
我可以想象将变量作为参数传递给下一个模板adapter.yml。然后,该模板adapter.yml获取变量作为参数,并可以使用${{}}表达式,并再次使用下一个模板steps_lib_build.yml...但仅为此创建模板似乎不知何故...解决方法。
还使用类似的东西
- template: …Run Code Online (Sandbox Code Playgroud) 目前,我有一个 OneBranch DevOps 管道,在恢复包时偶尔会失败。通常它会因为一些暂时性错误(例如套接字异常或超时)而失败。重新尝试该作业通常可以解决问题。
有没有办法配置作业或任务重试?
由于可以在 Azure DevOps 管道中停止单个步骤:
echo "##vso[task.complete result=Succeeded;]DONE"
Run Code Online (Sandbox Code Playgroud)
请参阅:https : //github.com/microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md#task-logging-commands
是否还可以检查条件并根据该条件停止整个管道运行或作业?
附注。我知道,您可以为作业设置条件,但在我的情况下,整个管道是单个作业,由于其他原因,将其拆分为多个作业是没有意义的。
我们有一个开发服务器托管来自多个 Azure DevOps 项目的 Web 服务。为了使用 yaml 部署管道,我们从部署池迁移到环境/资源。与部署池不同,项目之间不能共享环境和资源。您可以在这里投票来改变这一点。
我们按如下方式解决这个问题。
不幸的是,如果服务器上已经安装了环境代理,这会产生命名冲突。
The service already exists: vstsagent.MyDevOpsAccount..MyServer, it will be replaced
Error: Operation CreateService failed with return code 1072
Run Code Online (Sandbox Code Playgroud) azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml
我有一个新的发布管道包含 75 个阶段,当我创建发布时,每个阶段平均需要 5 分钟才能完成部署过程,然后移至下一个阶段,这意味着部署所有阶段需要近 7 个小时!
如何使所有阶段协同工作(并行)以在近 5 分钟内完成部署。如果这是不可能的,那么如何加快这个过程呢?
devops azure-devops azure-pipelines azure-pipelines-yaml cicd
我无法从 azureCLI 任务触发 azure 管道构建
任务 :
- task: AzureCLI@2
inputs:
azureSubscription: 'Free Trial(My subscription)'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
az --version
echo "Running : az account show"
az account show
#export AZURE_DEVOPS_EXT_PAT='mypat'
$env:AZURE_DEVOPS_EXT_PAT='mypat'
az pipelines create --name newPipeline --org https://dev.azure.com/AbiNilOrg/ --project azure-devops-kubernetes-terraform --branch master
Run Code Online (Sandbox Code Playgroud)
输出有错误:
Running : az account show
{
"environmentName": "AzureCloud",
"homeTenantId": "***",
"id": "73c1af29-384c-4574-bd88-92d7bb392cfc",
"isDefault": true,
"managedByTenants": [],
"name": "Free Trial",
"state": "Enabled",
"tenantId": "***",
"user": {
"name": "***",
"type": "servicePrincipal"
}
}
WARNING: This …Run Code Online (Sandbox Code Playgroud) azure azure-cli azure-devops azure-pipelines azure-pipelines-yaml
在 Azure Pipelines YAML 中,可以指定作业运行的环境。
jobs:
- deployment: Deploy
displayName: Deploy
environment: $(environment)
Run Code Online (Sandbox Code Playgroud)
将新值传递给管道应该会自动在 DevOps 中创建环境。
但是,我最近在尝试部署到新环境时遇到了此错误:
作业部署:找不到环境 [环境名称]。该环境不存在或尚未获得使用授权。
我手动创建环境后,管道部署成功。
是否有任何配置或我缺少的东西可以允许自动创建环境?
continuous-deployment azure-pipelines azure-pipelines-yaml cicd
我的解决方案包含 Framework 4.8 项目、.Net Standard 2.1 项目和 .net6 项目。它已经运行了几周,没有出现任何问题。
\n今天构建管道开始失败并出现错误
\n\n\n##[错误]nuget 命令失败,退出代码(1) 和错误(错误 NU5049:不支持 SDK 样式项目的 pack 命令,请使用\ndotnet pack 或 msbuild -t:pack 来打包此项目。您可以通过将\n\xe2\x80\x98NUGET_ENABLE_LEGACY_CSPROJ_PACK\xe2\x80\x99 环境变量设置为 \xe2\x80\x98true\xe2\x80\x99 来覆盖此行为。\n错误 NU5000: 无法构建包。
\n
我尝试编辑 YAML 将命令从 pack 更改为 dotnet pack,但出现值不接受错误。
\n\n[更新]
\n我试图确切地了解如何更正语法。\n我尝试在任务栏中输入 dotnet 并得到以下内容\n
我尝试了 .Net Core 但它插入的命令有 -task:DotNetCoreCLI@2\n 这也不起作用。
\ndotnet pack 的 YAML 是什么?
\n我的 YAML 如下
\ntrigger:\n- master\n\npool:\n vmImage: \'windows-2022\'\n\nvariables:\n solution: \'**/*.sln\'\n buildPlatform: \'Any CPU\'\n buildConfiguration: \'Release\'\n Major: \'2\'\n Minor: \'0\'\n …Run Code Online (Sandbox Code Playgroud) azure-devops ×8
azure ×3
cicd ×2
azure-cli ×1
azure-pipelines-release-pipeline ×1
devops ×1
pipeline ×1