Azure Release Pipeline 替换我的 $ 而用作文字

问题描述 投票:0回答:1

我有一个 ASP.NET Core 应用程序,它在生产环境中具有空连接。

我的目标是在部署过程中使用 Azure 库机密更改它。

我的发布管道在这里调用此方法:

ssh devops@server /usr/bin/docker run -p80:80 --name container1 --network open -e ASPNETCORE_ENVIRONMENT=PRD -e ConnectionStrings:my-db="User Id=USERX;Password=$(UserXPassword)');Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostora)(PORT=1520))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xe)))" -d register:5000/imagem01:1

这不起作用,因为我的 Azure 库中

$(UserXPassword)
的值中间有一个
$
,例如:
Pas$word!Now
管道返回
Pas!Now
(无需替换
$word
,因为它被理解为 Linux 变量)。

我们几乎尝试了所有方法,尝试围绕变量使用

'
,也尝试使用
"
。到目前为止唯一有效的方法是使用我在 Azure 库中的密码
Pas\$word!Now

如果我在密码上使用

\$
而不是
$
,它可以工作,但我不认为这是合理的。

任何人都可以向我解释我错过了什么吗?

docker asp.net-core azure-devops azure-pipelines continuous-deployment
1个回答
0
投票

为了避免类似问题,而不必转义特殊字符,例如

$
,请考虑在任务级别设置环境变量,而不是直接在脚本中使用管道变量(例如来自变量组)。

示例

考虑以下带有变量

my_connection_string
的变量组:

Test variable group

直接在脚本中使用管道变量:

trigger: none

pool:
  vmImage: 'ubuntu-latest'

variables:
  - group: group1

steps:
- bash: |
    echo "Connection string: $(my_connection_string)"
  displayName: 'Show connection string using pipeline variable'

运行管道:

Build log - using pipeline variable

在任务级别设置和使用环境变量:

trigger: none

pool:
  vmImage: 'ubuntu-latest'

variables:
  - group: group1

- bash: |
    echo "Connection string: $CONNECTION_STRING"
  displayName: 'Show connection string using environment variable'
  env: 
    CONNECTION_STRING: $(my_connection_string) # set environment variable from pipeline variable

运行管道:

Build log - using environment variable

© www.soinside.com 2019 - 2024. All rights reserved.