在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)在变量的值中填写默认值。也可以参考后面的内容,在流水线执行过程中为变量赋值。

image

在流水线中读取变量、为变量赋值

我们可以在各种流水线任务中读取变量值,也可以流水线中为变量赋值。Azure DevOps Server提供了多种机制,可以让用户在流水线中读取变量值:

1)在流水线读取参数。

可以将变量值作为参数的方式传输到任务脚本中,例如在命令行、python、PowerShell等中使用变量

下图是在Python脚本中读取自定义的变量

image

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

image

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的“库”选项卡中定义和管理。创建变量组的操作如下:

image

在流水线之间传递变量值

有不少用户提出了这个问题,是否可以在不同的流水线之间传递变量值,答案是不能,至少目前版本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 CI/CD 管道 #### 创建 Azure DevOps 组织和项目 为了开始配置 CI/CD 流水线,需先拥有Azure DevOps 组织并创建个新的项目来容纳源代码库和服务连接等资源[^3]。 #### 连接至代码仓库 Azure Pipelines 支持多种类型的版本控制系统作为其构建触发器的基础。对于托管于 GitHub、GitLab 或者本地 TFS 的 Git 仓库而言,在定义流水线前应确保已建立好相应的 OAuth 认证或个人访问令牌(PAT),从而允许 Azure DevOps 安全地拉取变更记录[^2]。 #### 编写 YAML 文件描述 Pipeline 行为 现代做法推荐采用声明式的 `azure-pipelines.yml` 来指定整个持续集成过程的行为模式。此文件通常位于项目的根目录下,并且能够清晰表达出环境变量设定、依赖项安装以及编译打包的具体指令集。下面是个简单的例子用于.NET Core应用程序: ```yaml trigger: - main pool: vmImage: 'ubuntu-latest' variables: buildConfiguration: 'Release' jobs: - job: BuildAndTest steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '6.x.x' # Specify SDK Version here. - script: dotnet restore displayName: Restore NuGet packages - script: dotnet build --configuration $(buildConfiguration) displayName: Build project - script: dotnet test --no-build --verbosity normal displayName: Run unit tests ``` 上述脚本会监听默认分支上的任何提交活动(`main`),选用最新的 Ubuntu 虚拟机映像执行系列操作,包括但不限于恢复Nuget包、编译解决方案及运行单元测试用例。 #### 发布 Artifacts 和部署到生产环境 旦完成所有必要的验证工作之后,就可以考虑将产物发布出去供后续阶段消费了。这可能涉及到生成 zip 文件或者其他形式的压缩包;而对于 Web 应用程序来说,则可以直接推送到 Azure App Services 中去实现无缝上线体验。此时应当利用 Release pipelines 功能模块进步定制化发布的细节部分,比如选择目标服务器组、制定预审批策略或是安排蓝绿部署方案等等[^1]。 #### 自动化与监控 最后但同样重要的是要充分利用 Azure Monitor 提供的强大日志分析能力以及其他第三方插件所提供的额外功能特性,以此保障整个软件开发生命周期内的透明度和可控性。同时也可以借助 Power Automate 实现更复杂的业务逻辑流转,例如当检测到特定条件满足时自动发送通知邮件给相关人员知晓最新进展状况[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值