zoukankan      html  css  js  c++  java
  • 在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--

  • 相关阅读:
    vue项目-百度地图-初始化展示覆盖范围(默认中心点和半径),点击切换中心点,地图落点(带数字)
    echarts地图下钻(全国到省)下钻一次
    JSON取值(key是中文或者数字)方式详解
    Chrome 80跨域cookie无法携带
    将博客搬至CSDN
    Django模板渲染,运行时如果报错:TemplateDoesNotExist at
    使用allure serve查看报告提示allure-results does not exists的解决方法
    jupyter lab不能自动打开浏览器和默认打开chrome浏览器的解决办法
    Chrome浏览器安装SwitchyOmega_Chromium插件,以及导入Burp Suite证书,抓取https请求包
    vue安装
  • 原文地址:https://www.cnblogs.com/danzhang/p/10561375.html
Copyright © 2011-2022 走看看