【发布时间】:2018-10-16 22:24:52
【问题描述】:
如何确保在非脚本任务中更新和访问任务组变量?
在任务组中,在脚本中设置CONTAINER_PORT变量后,在后面的脚本任务中可用,但通过$(CONTAINER_PORT)访问时,则返回原来的任务组变量值。
例如使用任务组创建构建后,我必须将CONTAINER_PORT 设置为81,因为默认情况下需要所有任务组变量。
任务 1 - 配置脚本 (Bash)
containerPort=8080
if [ $(framework) == 'dotnet' ]; then containerPort=80; fi;
echo "##vso[task.setvariable variable=CONTAINER_PORT]$containerPort";
任务 2 - 生成 Dockerfile(文件创建器)
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE $(CONTAINER_PORT)
...
任务 2(输出)- 我希望在这里 EXPOSE 8080
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 81
...
任务 3 - 提交脚本 (Bash)
echo "Port should be set to: $CONTAINER_PORT"
任务 3(输出)
Port should be set to: 8080
tldr;正确的$CONTAINER_PORT 值可以在以后的脚本任务中访问,但不能在需要文件内容的File Creator 任务中访问。
文件创建器示例:
【问题讨论】:
-
仅供参考 - 解决方法是要求
CONTAINER_PORT作为构建参数,而不是使用脚本设置它。 -
艰难地意识到这是任务组的限制
标签: azure-devops azure-pipelines azure-pipelines-build-task