我有一个 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
。
如果我在密码上使用
\$
而不是 $
,它可以工作,但我不认为这是合理的。
任何人都可以向我解释我错过了什么吗?
为了避免类似问题,而不必转义特殊字符,例如
$
,请考虑在任务级别设置环境变量,而不是直接在脚本中使用管道变量(例如来自变量组)。
考虑以下带有变量
my_connection_string
的变量组:
直接在脚本中使用管道变量:
trigger: none
pool:
vmImage: 'ubuntu-latest'
variables:
- group: group1
steps:
- bash: |
echo "Connection string: $(my_connection_string)"
displayName: 'Show connection string 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
运行管道: