在Azure DevOps Server (TFS 2019) 流水线传递参数
变量概述
在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散、各自独立的任务之间相关影响并共享数据。在流水线中使用变量,可以在各任务之间相互调用关键性的数据。顾名思义,变量是一个可以在流水线中变化值。在CI/CD的执行流水线中,我们都需要使用到各种用途的字符、数字,对象这些字符、数据的定义,我们可以采用变量的方式实现,而不需要在代码中硬编码。系统在运行流水线的过程中,将这些定义的变量自动替换为我需要的值。例如在线部署过程中,我们将用户名和密码等信息存储在变量中,这样不仅让配置过程更加直观,还提高的流水线的重用性。
在DevOps Server 的变量中,有一部分变量是系统自动设置的,我们不能自由修改,例如生成名称、生成编号等。这些系统预先定义的变量,一般在命名格式上有固定的前缀, 例如system、build、Agent等。例如Build.DifinitionName,标识生成流水线的名称。
在这篇文章中,我们主要介绍如何管理和使用用户自定义的变量,以及在不同的代理、不同的流水线中,我们如何使用这些变量。
新增变量
可以在生成流水线和发布流水线中分别定义变量。如下图,我们在生产流水线定义变量:
1)在生成流水线清单中选择需要编辑流水线
2)选择编辑按钮
3)选择变量按钮
4)点击添加按钮,新增变量。
我们一般使用点(.)或者下划线(_)隔开变量中的单词,以便提高变量的可读性,例如user.name,login.name。
5)在变量的值中填写默认值。也可以参考后面的内容,在流水线执行过程中为变量赋值。

在流水线中读取变量、为变量赋值
我们可以在各种流水线任务中读取变量值,也可以流水线中为变量赋值。Azure DevOps Server提供了多种机制,可以让用户在流水线中读取变量值:
1)在流水线读取参数。
可以将变量值作为参数的方式传输到任务脚本中,例如在命令行、python、PowerShell等中使用变量
下图是在Python脚本中读取自定义的变量

当任务执行的时候,可以在日志中看到输出的变量值

2)在流水线中设置变量值
如果在流水线中,需要按照需求更改变量值,可以使用Azure DevOps Server 提供的接口来修改变量值。例如PowerShell的脚本如下
Write-Host "##vso[task.setvariable variable=login.name]zhanghongjun"
Write-Host "##vso[task.setvariable variable=login.password;issecret=true]mypassword"
使用shell脚本如下:
#!/bin/bash
echo "##vso[task.setvariable variable=login.name]zhanghongjun"
echo "##vso[task.setvariable variable=login.password;issecret=true]mypassword"
变量组:在流水线之间共享变量值
如果需要在流水线中共享变量,可以使用变量组。使用变量组存储要在多个管道中控制和可用的值。变量组在Pipelines Hub的“库”选项卡中定义和管理。创建变量组的操作如下:

在流水线之间传递变量值
有不少用户提出了这个问题,是否可以在不同的流水线之间传递变量值,答案是不能,至少目前版本DevOps Server 2019不能。
在下面的这样一个场景中,有这样的需求:我们使用Maven编译和打包项目代码,在部署过程使用容器Docker作为部署环境;需要创建Docker镜像时,使用Maven的POM文件中的版本号作为容器的名称,这样用户就非常方便的能够查询到镜像中部署的软件版本。为了解决这样的问题,目前我们使用的解决方案是在编译过程中使用脚本获取POM文件中的版本号,然后将其用来命名Maven的数据文件名称,例如company-cms-1.0.1.jar;然后在制作镜像的过程中,分析这个名称,使用其中的版本号作为镜像名称。
微软DevOps MVP 张洪君 http://www.cnblogs.com/danzhang
--End--
在Azure DevOps Server (TFS 2019) 流水线传递参数的更多相关文章
- 在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)
概述 Xcode是开发基于苹果macOS系统的桌面应用和移动应用的主要IDE工具.使用Azure DevOps Server (原名TFS)系统中的pipelines流水线功能,可以方便的集成Xcod ...
- 在Azure DevOps Server (TFS)中实现VUE项目的自动打包
概述 Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.由于它在数据绑定.页面展示和使用简单方面有很大的优势,逐渐被越来越多的前端开发团队使用.本文 ...
- Azure DevOps Server (TFS) 代码库Repo管理培训
Repo是分布式代码库Git中的一个专用词,用于存储和管理开发团队中特定的源代码. 使用Git,可以协调整个团队的代码更改. 即使您只是一个开发人员,版本控制也可以帮助您在修复错误和开发新功能时保持井 ...
- 还原Azure DevOps Server (TFS)中误删除的生成流水线
流水线历史记录 DevOps Server流水线的历史记录有完善的版本日志,用户可以随时回退到修改过程中的任何一个版本,还能比较差异.这个历史记录功能可以和代码库中的版本控制媲美. 图一:生成历史记录 ...
- Azure DevOps Server (TFS)中代码文件换行问题解决方案(Git)
之前写过一篇博客"探索TFS Git 库文件换行(CRLF)的处理方式",主要是针对TFVC代码库的. 下面这篇文章说明如何在TFS的Git库中处理代码换行的问题. 概述 在Azu ...
- 集成Azure DevOps Server(TFS) 与微软Teams
1.概述 Microsoft Teams是Office 365中团队协作的中心.将团队的所有聊天.会议.文件和应用程序放在一个位置.软件开发团队可以在一个专门的协作中心中即时访问他们所需的所有内容,T ...
- 在Windows操作系统的文件管理器中集成Azure DevOps Server (TFS)工具菜单
故事场景 使用过SVN的用户,都知道在Windows的文件夹上点击鼠标右键,就会弹出Tortoise SVN的操作菜单(俗称小乌龟).通过这个功能,用户不需要打开SVN工具,可以直接在Windows的 ...
- Azure DevOps Server (TFS) 修改工作项附件大小限制
1. 问题描述 当上传工作项附件时,系统提示"附件大小限制" 2.解决方案 2.1 默认设置 默认情况下,Azure DevOps Service和Team Foundation ...
- Azure DevOps Server (TFS) 修改Git文件大小限制
签入Git的所有文件将永远保留在存储库中,限制大文件签入到代码库,可以增加磁盘使用效率,提高系统备份还原等日常维护的效率. 通过下面的设置,团队项目管理员可以阻止超过特定大小的文件进入存储库.如果推送 ...
随机推荐
- Redis使用及工具类
原地址:https://www.cnblogs.com/wyy123/p/6078593.html [学会安装redis] 从redis.io下载最新版redis-X.Y.Z.tar.gz后解压,然后 ...
- 英文文档帮查&翻译计划
以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄.初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途. ...
- Spring中Bean及@Bean的理解
Spring中Bean及@Bean的理解 Bean在Spring和SpringMVC中无所不在,将这个概念内化很重要,下面分享一下我的想法: 一.Bean是啥 1.Java面向对象,对象有方法和属性, ...
- mysql timestamp字段定义的
Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TI ...
- oracle查看被锁的表和解锁
--以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...
- win2012R2打Windows8.1-KB2919355 问题
解决方法 https://blog.csdn.net/qwq1503/article/details/65916426
- mysql实用函数
1. group_concat(); 可以将选择的字段列数据,分组以逗号分隔成一串.实用方便.select id,group_concat(distinct name) from ttt group ...
- CSS定位方法
- sed 笔记
sed是一个非交互式文本编辑器,他可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘,文件重定向,字符串,变量甚至来自于管道的文本.sed适用于以下三种场合: 编辑相对交互式文本编辑器而言太大的 ...
- 【Django】网页跳转的问题
这两天有个比较奇怪了问题困扰着我,就是网页跳转之后页面没有变化,虽然url已经变了,但是页面还是原来的,只是表单数据清空了 就是http://127.0.0.1:8000/signup_signin/ ...