变量概述

在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) 流水线传递参数的更多相关文章

  1. 在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)

    概述 Xcode是开发基于苹果macOS系统的桌面应用和移动应用的主要IDE工具.使用Azure DevOps Server (原名TFS)系统中的pipelines流水线功能,可以方便的集成Xcod ...

  2. 在Azure DevOps Server (TFS)中实现VUE项目的自动打包

    概述 Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.由于它在数据绑定.页面展示和使用简单方面有很大的优势,逐渐被越来越多的前端开发团队使用.本文 ...

  3. Azure DevOps Server (TFS) 代码库Repo管理培训

    Repo是分布式代码库Git中的一个专用词,用于存储和管理开发团队中特定的源代码. 使用Git,可以协调整个团队的代码更改. 即使您只是一个开发人员,版本控制也可以帮助您在修复错误和开发新功能时保持井 ...

  4. 还原Azure DevOps Server (TFS)中误删除的生成流水线

    流水线历史记录 DevOps Server流水线的历史记录有完善的版本日志,用户可以随时回退到修改过程中的任何一个版本,还能比较差异.这个历史记录功能可以和代码库中的版本控制媲美. 图一:生成历史记录 ...

  5. Azure DevOps Server (TFS)中代码文件换行问题解决方案(Git)

    之前写过一篇博客"探索TFS Git 库文件换行(CRLF)的处理方式",主要是针对TFVC代码库的. 下面这篇文章说明如何在TFS的Git库中处理代码换行的问题. 概述 在Azu ...

  6. 集成Azure DevOps Server(TFS) 与微软Teams

    1.概述 Microsoft Teams是Office 365中团队协作的中心.将团队的所有聊天.会议.文件和应用程序放在一个位置.软件开发团队可以在一个专门的协作中心中即时访问他们所需的所有内容,T ...

  7. 在Windows操作系统的文件管理器中集成Azure DevOps Server (TFS)工具菜单

    故事场景 使用过SVN的用户,都知道在Windows的文件夹上点击鼠标右键,就会弹出Tortoise SVN的操作菜单(俗称小乌龟).通过这个功能,用户不需要打开SVN工具,可以直接在Windows的 ...

  8. Azure DevOps Server (TFS) 修改工作项附件大小限制

    1. 问题描述 当上传工作项附件时,系统提示"附件大小限制" 2.解决方案 2.1 默认设置 默认情况下,Azure DevOps Service和Team Foundation ...

  9. Azure DevOps Server (TFS) 修改Git文件大小限制

    签入Git的所有文件将永远保留在存储库中,限制大文件签入到代码库,可以增加磁盘使用效率,提高系统备份还原等日常维护的效率. 通过下面的设置,团队项目管理员可以阻止超过特定大小的文件进入存储库.如果推送 ...

随机推荐

  1. 【学习】DataFrame&Series类【pandas】

    参考链接:http://blog.csdn.net/yhb315279058/article/details/50226027 DataFrame类: DataFrame有四个重要的属性: index ...

  2. java性能优化总结

    本人在java中积累了一些性能优化相关的经验,现在总结如下: 批量处理服务性能优化 RTB服务性能优化 BasicData线上问题解决,疯狂FullGC的问题 BasicData线上部分服务器cpu使 ...

  3. 阿里云ODPS <====>蚂蚁大数据

    1.命令行客户端工具的安装参考文档:http://repo.aliyun.com/odpscmd/?spm=a2c4g.11186623.2.17.5c185c23zHshCq 2.创建和查看表:ht ...

  4. python装饰器补漏

    以前写过一篇装饰器文章,觉得少了点东西,今天特来补上,也就是带参数的装饰器,上篇文章写的不严谨 def logger(logs=""): def outer(f): def inn ...

  5. MySQL InnoDB引擎B+树索引简单整理说明

    本文出处:http://www.cnblogs.com/wy123/p/7211742.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  6. rpm包安装的nginx热升级

    文章目录一.本地环境基本介绍二.yum升级命令说明三.升级好nginx后如何不中断业务切换3.1.nginx相关的信号说明3.2.在线热升级nginx可执行文件程序一.本地环境基本介绍本次测试环境,是 ...

  7. JPA和SpringData知识梳理

    一. JPA,全称Java Persistence API,用于对象持久化的API,定义一套接口,来规范众多的ORM框架,所以它是在ORM框架之上的应用. 下面主要讲JPA在Hibernate基础上的 ...

  8. cast

    https://blog.csdn.net/seabeam/article/details/47841539 在UVM中经常可以看到$cast的身影,这是SV的build-in task之一,当然它还 ...

  9. [leetcode]150. Evaluate Reverse Polish Notation逆波兰表示法

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  10. [leetcode]297. Serialize and Deserialize Binary Tree 序列化与反序列化二叉树

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...