如何在Concourse Pipeline中设置变量并复用命令执行结果
在Concourse Pipeline中保存并复用命令执行结果
要实现将gh release view | head -n 1 | cut -f 1的执行结果作为变量供后续步骤使用,核心是利用Concourse的task outputs/inputs机制共享数据,具体实现如下:
1. 编写获取版本号的Task
创建一个task执行目标命令,将结果写入output目录的文件中,供后续任务读取:
jobs: - name: fetch-and-use-release-version plan: - task: fetch-release-version config: platform: linux image_resource: type: docker-image source: {repository: alpine/git} # 替换为你已配置好gh命令的镜像 outputs: - name: release-version # 定义输出目录,用于存储结果文件 run: path: sh args: - -c - | # 执行命令并将结果写入output目录的文件 gh release view | head -n 1 | cut -f 1 > release-version/version.txt
2. 在后续Task中读取并使用变量
通过inputs引入之前的output目录,读取文件内容转为变量:
- task: use-release-version config: platform: linux image_resource: type: docker-image source: {repository: alpine} inputs: - name: release-version # 引入前一个task的输出目录 run: path: sh args: - -c - | # 读取文件内容赋值给变量 RELEASE_VERSION=$(cat release-version/version.txt) # 后续步骤直接使用该变量 echo "当前最新版本: $RELEASE_VERSION" # 这里可添加业务逻辑,如用版本号构建镜像、生成发布说明等
关键注意点
- outputs/inputs名称一致:前一个task的outputs名称必须和后续task的inputs名称完全匹配,Concourse才会自动挂载目录。
- 镜像兼容性:确保使用的镜像已安装
gh命令,且已完成Github登录配置(你已确认这部分没问题)。 - 文件写入路径:必须将结果写入outputs定义的目录下,否则后续任务无法访问到数据。
内容的提问来源于stack exchange,提问作者Sachin Kainth
相关产品推荐
相关产品推荐

