如何编写含特殊字符的Azure DevOps YAML脚本?
解决Azure DevOps流水线提前解析脚本变量的问题
要让${var1}和${var2}在Docker容器执行run.sh时才被解析,需要对变量进行转义,避免Azure DevOps流水线提前替换这些变量。
修改后的流水线任务代码
- script: | tee -a run.sh <<EOF #!/bin/sh ###replace configuration with environment variables /bin/sed -i 's@https://development-website.mywebsite.cloud@'"\\${var1}"'@g' /usr/share/nginx/html/assets/index*.js /bin/sed -i 's@https://development-login.mywebsite.cloud@'"\\${var2}"'@g' /usr/share/nginx/html/assets/index*.js EOF displayName: "make run.sh"
原理说明
Azure DevOps的脚本任务会自动解析脚本中的${变量名}格式内容,将其替换为流水线中定义的对应变量值。通过在$前添加双反斜杠(\\),可以让Azure DevOps将\$视为普通字符写入run.sh文件,最终生成的脚本中变量会保留为${var1}和${var2}。当Docker容器执行该脚本时,容器内的Shell会正常解析这些环境变量并完成替换操作。
验证生成的run.sh内容
生成的run.sh文件内容应如下,变量未被提前替换:
#!/bin/sh ###replace configuration with environment variables /bin/sed -i 's@https://development-website.mywebsite.cloud@'"${var1}"'@g' /usr/share/nginx/html/assets/index*.js /bin/sed -i 's@https://development-login.mywebsite.cloud@'"${var2}"'@g' /usr/share/nginx/html/assets/index*.js
内容的提问来源于stack exchange,提问作者jazza1000
相关产品推荐
相关产品推荐

