Azure DevOps 在内联 bash 脚本中为操作创建变量
Azure DevOps creating variables for actions in inline bash scripts
在 Azure DevOps 中创建这样的内联 bash 命令时:
checksum="$(cksum file.txt)"
我最终会将 cksum file.txt
视为必需参数。无论出于何种原因,这种行为并不一致,所以有时我已经设置了可以与内联 Bash 脚本一起正常工作的构建管道,但不可避免地,我将 运行 解决这个问题并且无法修复它.
我什至尝试将 cksum file.txt
参数设置为 cksum file.txt
,但将 space 替换为编码字符串:%20
。它变为 cksum%20file.txt
,这在 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
很简单。这是我可以在任何 bash
终端中 运行 的代码。可悲的是,Azure DevOps 正在向任务组添加一个参数:
这个参数存在的事实意味着 Azure DevOps 正在阻止我的 bash 文件正确执行和字符串替换最关键的部分。
我该如何解决这个问题?
如果您的意思是要将字符串“cksum file.txt
”作为内联 bash 脚本中的参数传递,那么您可以设置一个变量并在后续 tasks/scripts 中使用该变量.
例如:
设置checksum
变量:
echo "##vso[task.setvariable variable=checksum]cksum file.txt"
读取变量
echo "No problem reading $CHECKSUM"
详情请见Define and modify your variables in a script
如果您 运行 一个脚本指定了类似 $/project/script/Test0427/bash.sh
的路径,那么您可以直接将字符串作为参数传递:
参数:
"cksum file.txt
" "Test Arguments 1018
"
读取变量
echo "No problem reading and "
您可以使用命令替换,因此将 $() 两边的反引号 ` 替换掉。
https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html 有关命令替换的详细信息。
checksum="`cksum file.txt`"
完整脚本示例
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
在 Azure DevOps 中创建这样的内联 bash 命令时:
checksum="$(cksum file.txt)"
我最终会将 cksum file.txt
视为必需参数。无论出于何种原因,这种行为并不一致,所以有时我已经设置了可以与内联 Bash 脚本一起正常工作的构建管道,但不可避免地,我将 运行 解决这个问题并且无法修复它.
我什至尝试将 cksum file.txt
参数设置为 cksum file.txt
,但将 space 替换为编码字符串:%20
。它变为 cksum%20file.txt
,这在 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
很简单。这是我可以在任何 bash
终端中 运行 的代码。可悲的是,Azure DevOps 正在向任务组添加一个参数:
这个参数存在的事实意味着 Azure DevOps 正在阻止我的 bash 文件正确执行和字符串替换最关键的部分。
我该如何解决这个问题?
如果您的意思是要将字符串“cksum file.txt
”作为内联 bash 脚本中的参数传递,那么您可以设置一个变量并在后续 tasks/scripts 中使用该变量.
例如:
设置
checksum
变量:echo "##vso[task.setvariable variable=checksum]cksum file.txt"
读取变量
echo "No problem reading $CHECKSUM"
详情请见Define and modify your variables in a script
如果您 运行 一个脚本指定了类似 $/project/script/Test0427/bash.sh
的路径,那么您可以直接将字符串作为参数传递:
参数:
"
cksum file.txt
" "Test Arguments 1018
"读取变量
echo "No problem reading and "
您可以使用命令替换,因此将 $() 两边的反引号 ` 替换掉。
https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html 有关命令替换的详细信息。
checksum="`cksum file.txt`"
完整脚本示例
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