我尝试使用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)
我尝试了一些语法的小变化,所有这些都会导致相同的错误。
我在这里缺少什么?
目标:
返回 Cosmos 集合分区内特定文档字段的不同值的计数。
脚步:
如果我在 Azure Cosmos 数据库上运行以下查询,
SELECT DISTINCT c.field
FROM c
WHERE c.field = 'abc' AND c.partitionKeyField = '123'
Run Code Online (Sandbox Code Playgroud)
我按预期得到一行,例如以下响应
[
{
"field": "abc"
}
]
Run Code Online (Sandbox Code Playgroud)
但是,如果我随后运行以下查询以尝试通过以下查询计算响应中不同文档的数量
[
{
"field": "abc"
}
]
Run Code Online (Sandbox Code Playgroud)
它返回
[
6
]
Run Code Online (Sandbox Code Playgroud)
c.field
这是设置为 的文档总数,"abc"
而不是 的不同值的数量c.field
。
问题:
请您帮助我理解为什么查询返回 的文档数量而不是不同值的数量c.field
,以及是否有一个查询将返回 的不同值的数量c.field
,即 1?
编辑-PS。我知道这是一个人为的示例,因为根据定义,唯一值的数量c.field
始终为 1 - 我故意从实际情况简化了这一点。
我有一个包含不同密钥(例如 Key1、Key2、Key3)的 Azure Key Vault。在某些在一个管道任务中动态读取的设置中,我有一个值来说明要使用哪个键(让 KeyName 变量为“Key2”)。如何读取管道中Key2的秘密值?
我尝试过不同的组合,但没有一个对我有用。
测试管道编号 1 - 使用连接到 Key Vault 的组变量(为了更简单,这里的 KeyName 是静态的,但实际上,它是在管道期间通过 powershell 脚本设置的):
jobs:
- job: JobA
variables:
- group: KeyVaultGroup #Key vault have secret values "Key1,Key2,Key3..."
- name: KeyName
value: Key2
- name: MyValue
value: $[ variables[variables.KeyName] ]
steps:
- powershell: |
Write-Host "Var1 $($env:VARENV1)"
Write-Host "Var2 $($env:VARENV2)"
env:
VarEnv1: $(MyValue)
VarEnv2: $($(KeyName))
Run Code Online (Sandbox Code Playgroud)
结果是:
Var1
Var2 $(Key2)
Run Code Online (Sandbox Code Playgroud)
MyValue 不起作用,因为在加载密钥保管库变量之前会评估该变量。当在管道期间设置 KeyName 时,它也将不起作用(但这可以通过使用单独的作业并使用输出变量来设置 KeyName 来解决 - 就像测试示例 2 中一样)。表达式 $($(KeyName)) 不起作用,因为它不会递归扩展变量(bug?)。
当使用 AzureKeyVault 任务读取 Key …
azure-keyvault azure-devops azure-pipelines azure-yaml-pipelines
是否有一个任务或命令可用于在管道运行时输出 Azure DevOps 模板中的所有参数变量?
我希望管道中的第一个任务打印所有参数,这将有助于发现错误。
有什么建议
我遇到了一个问题,当我尝试使用配置文件时,我在这里和其他地方阅读了一些帖子,但我无法解决工作中的问题,
在我的问题中,我添加了配置。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CA.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<CA.Properties.Settings>
<appSettings>
<add key="ab123" value="D:\ab123\Source\ab123.c" />
</appSettings>
</CA.Properties.Settings>
</userSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
文件中声明
string ab123 = ConfigurationManager.AppSettings["ab123"];
Run Code Online (Sandbox Code Playgroud)
但是在侧面,我显示的错误是“win32 Exception was unhandled - System can not find the file specified”
System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["ab123"]);
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,ab123
值始终为空!我确定路径是正常的。
我该如何解决?
我们有两个构建管道从同一个存储库中的两个不同路径构建。
BuildPipelineA建立/ PathA从AppRepo并公布神器ArtifactA
BuildPipelineB建立/ PathB从AppRepo并公布神器ArtifactB
然后我们有一个发布管道,它使用这两个工件将应用程序部署到一些 WebApp。
作为分支策略,我们使用自定义 Gitflow 工作流。唯一的区别是我们有两个开发团队,每个团队都有自己的集成分支。所以基本上develop
我们没有经典分支,而是有develop
,develop-teamAlpha
和develop-teamBeta
。除了master
,release/
和之外,触发器设置为所有三个分支,hotfix/
因此总共有六个分支是目标。
我想要实现的是建立一个 CI/CD 流程,该流程将始终从匹配(相同)分支中获取工件以进行自动触发的发布创建。
例如,假设存在先前的master
ArtifactB:
开发人员master
为/PathA 中的某些文件提交更改
BuildPipelineA触发器和构建ArtifactA从master
该ReleasePipeline现在应该创建一个使用新版本master
ArtifactA和master
ArtifactB
即使触发工件来自不同的分支,我也希望发生同样的事情:
开发人员develop
为/PathB 中的某些文件提交更改
BuildPipelineB触发器和构建ArtifactB从develop
该ReleasePipeline现在应该创建一个使用新版本develop
ArtifactB和(现有) …
我正在azure devops 管道中尝试用于集成数据库测试的服务容器。
根据这个开源的虚拟 ci cd 管道项目https://dev.azure.com/funktechno/_git/dotnet%20ci%20pipelines。我正在尝试使用 azure devops服务容器进行集成管道测试。我让 postgress 和 mysql 工作。我在使用microsoft sql server 时遇到问题。
.yml 文件
resources:
containers:
- container: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
ports:
# - 1433
- 1433:1433
options: -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express'
- job: unit_test_db_mssql
# condition: eq('${{ variables.runDbTests }}', 'true')
# continueOnError: true
pool:
vmImage: 'ubuntu-latest'
services:
localhostsqlserver: mssql
steps:
- task: UseDotNet@2
displayName: 'Use .NET Core sdk 2.2'
inputs:
packageType: sdk …
Run Code Online (Sandbox Code Playgroud) sql-server automated-tests docker azure-devops azure-pipelines
我正在使用 Azure DevOps,我需要将 bash 命令的返回设置为一些变量,例如我有以下内容:
variables:
VERSION: 7.2 # works fine
FILE_VERSION: ${{cat public/VERSION}} # syntax error
Run Code Online (Sandbox Code Playgroud)
我尝试了一些${{}}
没有成功的变体,并且找不到正确的语法,但我认为它一定是可能的。
对于我们的管道,我们在同一台计算机上安装了两个 Windows 自托管代理。下面列出了我们的主要前端管道 .yml。这工作得很好,除了由于某种原因npm install
没有得到 nx 或玩笑。为了解决这个问题,我们只需在每个代理的管道中运行一次npm install -g nx
即可。npm install -g jest
第一次运行后一切正常,我们可以删除额外的安装以加快执行速度。但是,当 nx 或 jest 的新版本发布时,它不会更新,这绝对不是最佳实践。
我猜问题是这些需要全局安装才能工作,所以常规程序npm install
无法实现这一点。我包含了我们的一个稍微修改过的版本package.json
,它显示了 nx (@nrwl) 和 jest 包含在包中。有谁知道安装 nx 和 jest 的更好方法,而无需在每个管道构建中重新安装它们,并且在首次使用新代理运行后无需删除安装语句?预先感谢您的任何建议,如果我可以提供任何其他信息,请告诉我。
trigger:
- none
pool: 'myPool'
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
- checkout: self
clean: true
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
# Install stuff
- task: Npm@1
timeoutInMinutes: 10
inputs:
command: 'install'
workingDir: '$(System.DefaultWorkingDirectory)/ID_CLIENT'
displayName: 'npm install'
# Test stuff …
Run Code Online (Sandbox Code Playgroud) 我的 DevOps 管道给了我这个错误:
存在资源授权问题: “管道无效。作业执行Terraform:步骤AzureCLI输入connectedServiceNameARM引用服务连接Azure:$(subscriptionName),无法找到。服务连接不存在或尚未被授权使用。有关授权详细信息,请参阅https://aka.ms/yamlauthz。”
我正在使用的配置是动态查找订阅名称。
我为此使用的步骤是:
- bash: |
# pull the subscription data
# ... read data into local variables
# set the shared variables
echo "##vso[task.setvariable variable=subscriptionId]${SUBSCRIPTION_ID}"
echo "##vso[task.setvariable variable=subscriptionName]${SUBSCRIPTION_NAME}"
Run Code Online (Sandbox Code Playgroud)
从那里我尝试通过模板调用 Azure CLI:
- template: execution-cli.yml
parameters:
azureSubscriptionId: $(subscriptionId)
azureSubscriptionName: $(subscriptionName)
Run Code Online (Sandbox Code Playgroud)
在模板内,我的 CLI 步骤使用:
steps:
- task: AzureCLI@2
displayName: Test CLI
inputs:
azureSubscription: "ARMTest ${{ parameters.azureSubscriptionName }}"
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
az --version
addSpnToEnvironment: true
useGlobalConfig: true
Run Code Online (Sandbox Code Playgroud)
看起来 Pipelines 正在尝试先发制人地检查授权,而没有注意到其中存在变量。我在这里做错了什么,导致 Azure 在错误的时间尝试解决该问题? …
azure-devops ×8
azure ×1
c# ×1
config ×1
distinct ×1
docker ×1
node.js ×1
npm ×1
sql-server ×1
yaml ×1