Saw*_*oes 4 azure-devops azure-pipelines-build-task azure-pipelines azure-task-groups
在 Azure DevOps 中创建这样的内联 bash 命令时:
checksum="$(cksum file.txt)"
Run Code Online (Sandbox Code Playgroud)
我最终会看到它cksum file.txt是一个必需的参数。无论出于何种原因,这种行为并不一致,因此有时我已经设置了可以与内联 Bash 脚本一起正常工作的构建管道,但不可避免地,我会遇到这个问题并且无法修复它。
我什至尝试将cksum file.txt参数设置为cksum file.txt,但用编码字符串替换空格:%20。它变成cksum%20file.txtwhich 在 bash 中不是有效命令。
这是完整的脚本:
yarnCacheFilename="$(cksum yarn.lock).yarnCache.docker.tgz"
wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"
if [ -f "$yarnCacheFilename" ]; then
mkdir node_modules
tar -xzvf "$yarnCacheFilename"
else
yarn install --production
fi
Run Code Online (Sandbox Code Playgroud)
足够简单。这是我可以在任何bash终端中运行的代码。遗憾的是,Azure DevOps 正在向任务组添加一个参数:
该参数存在的事实意味着 Azure DevOps 阻止了我的 bash 文件正确执行并替换了最关键的部分。
我如何解决这个问题?
您可以使用命令替换,因此将 $() 替换为两边的反勾号 `。
https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html有关命令替换的更多信息。
checksum="`cksum file.txt`"
Run Code Online (Sandbox Code Playgroud)
完整脚本示例
yarnCacheFilename="`cksum yarn.lock`.yarnCache.docker.tgz"
wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"
if [ -f "$yarnCacheFilename" ]; then
mkdir node_modules
tar -xzvf "$yarnCacheFilename"
else
yarn install --production
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5180 次 |
| 最近记录: |