热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于azure:动态临时变量为-Azure-DevOps-Pipeline-变量自定义锦上添花

大家好,我是本期的微软MVP实验室研究员贠乾。AzurePipeline自身曾经提供了内置变量。不同于上述形式,明天我将带来如何在AzureDevOpsPipeline运行时创

大家好,我是本期的微软MVP实验室研究员贠乾。Azure Pipeline 自身曾经提供了内置变量。不同于上述形式,明天我将带来如何在 Azure DevOps Pipeline 运行时创立、应用动静长期变量,实现变量的动静自定义。接下来让咱们在试验中一探到底吧!

思路浅析

在咱们分享的 Azure Terraform 系列文中有介绍到对于 Terraform 的状态文件近程存储的问题,咱们在 Azure DevOps Pipeline 的 Task Job 加 azure_cli_script 执行内联脚本(该脚本帮咱们创立好 Terraform 状态文件存储所须要的 Azure Resource Group、 Azure Storage Account、Azure KeyVault 等资源)。大家须要留神的是,内联脚本中有应用动静变量,该变量长期存储 Azure Storage Account 的 Account Key,如下图所示:

本篇文章,我持续率领大家剖析如何在 Azure DevOps Pipeline 运行中创立应用动静长期变量,应用动静长期变量替换 Azure Pipeline 管道变量。

我的项目整体架构图

Pipeline 变量定义、输入

在此阶段,咱们须要利用 azure_cli_script 工作,创立动静长期变量,输入参数,其中最次要的是将动静长期变量输入,Task yaml 如下所示
输入的变量用于同一个 stage,不同 job

- stage: script
  jobs:
   - job: azure_cli_script
     steps: 
      - task: AzureCLI@2
        displayName: 'Azure CLI :Create Storage Account,Key Vault And Set KeyVault Secret'
        name: 'output_variable'
        inputs:
          azureSubscription: 'Microsoft Azure Subscription(xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)'
          scriptType: 'bash'
          addSpnToEnvironment: true
          scriptLocation: 'inlineScript'
          inlineScript: |
              # create azure resource group
              az group create --location eastasia --name $(terraform_rg)
​
              # create azure storage account
              az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS
​
              # create storage account container for tf state 
              az storage container create --name $(storage_account_container) --account-name $(storage_account)
​
              # query storage key and set variable
              ACCOUNT_KEY=$(az storage account keys list --resource-group $(terraform_rg) --account-name $(storage_account) --query "[?keyName == 'key1'][value]" --output tsv)
​
              # create azure keyvault
              az keyvault create --name $(keyvault) --resource-group $(terraform_rg) --location eastasia --enable-soft-delete false
​
              # set keyvault secret,secret value is ACCOUNT_KEY
              az keyvault secret set --name $(keyvault_sc) --vault-name $(keyvault)  --value $ACCOUNT_KEY
​
              # set secret varivale and add to environment
              echo "##vso[task.setvariable variable=ACCOUNT_KEY;isOutput=true]$ACCOUNT_KEY"
              #echo "##vso[task.setvariable variable=ACCOUNT_KEY;issecret=true;isOutput=true]$ACCOUNT_KEY"
​
   - job: same_stage_echo
     dependsOn: azure_cli_script
     variables:
       ACCOUNT_KEY: $[dependencies.azure_cli_script.outputs['output_variable.ACCOUNT_KEY']]
     steps:
       - task: Bash@3
         displayName: 'Bash :output temporary variables in different jobs on the same stage'
         inputs:
           targetType: 'inline'
           script: |
             # echo ACCOUNT_KEY
             echo "ACCOUNT_KEY is $ACCOUNT_KEY"

输入变量用于不同 stage

- stage: echo_varibale
  dependsOn: script
  jobs:
    - job: different_stage_echo
      variables:
        ACCOUNT_KEY: $[stageDependencies.script.azure_cli_script.outputs['output_variable.ACCOUNT_KEY']]
      steps:
        - task: Bash@3
          displayName: 'Bash :output temporary variables in same jobs on the same stage'
          inputs:
            targetType: 'inline'
            script: |
              # echo ACCOUNT_KEY
              echo "ACCOUNT_KEY is $ACCOUNT_KEY"

以下为残缺的 azure-pipelines-1.yaml

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
​
trigger:
- remote_stats
​
pool:
  vmImage: ubuntu-latest
​
stages:
- stage: script
  jobs:
   - job: azure_cli_script
     steps: 
      - task: AzureCLI@2
        displayName: 'Azure CLI :Create Storage Account,Key Vault And Set KeyVault Secret'
        name: 'output_variable'
        inputs:
          azureSubscription: 'Microsoft Azure Subscription(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx)'
          scriptType: 'bash'
          addSpnToEnvironment: true
          scriptLocation: 'inlineScript'
          inlineScript: |
              # create azure resource group
              az group create --location eastasia --name $(terraform_rg)
​
              # create azure storage account
              az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS
​
              # create storage account container for tf state 
              az storage container create --name $(storage_account_container) --account-name $(storage_account)
​
              # query storage key and set variable
              ACCOUNT_KEY=$(az storage account keys list --resource-group $(terraform_rg) --account-name $(storage_account) --query "[?keyName == 'key1'][value]" --output tsv)
​
              # create azure keyvault
              az keyvault create --name $(keyvault) --resource-group $(terraform_rg) --location eastasia --enable-soft-delete false
​
              # set keyvault secret,secret value is ACCOUNT_KEY
              az keyvault secret set --name $(keyvault_sc) --vault-name $(keyvault)  --value $ACCOUNT_KEY
​
              # set secret varivale and add to environment
              echo "##vso[task.setvariable variable=ACCOUNT_KEY;isOutput=true]$ACCOUNT_KEY"
              #echo "##vso[task.setvariable variable=ACCOUNT_KEY;issecret=true;isOutput=true]$ACCOUNT_KEY"
​
   - job: same_stage_echo
     dependsOn: azure_cli_script
     variables:
       ACCOUNT_KEY: $[dependencies.azure_cli_script.outputs['output_variable.ACCOUNT_KEY']]
     steps:
       - task: Bash@3
         displayName: 'Bash :output temporary variables in different jobs on the same stage'
         inputs:
           targetType: 'inline'
           script: |
             # echo ACCOUNT_KEY
             echo "ACCOUNT_KEY is $ACCOUNT_KEY"
​
- stage: echo_varibale
  dependsOn: script
  jobs:
    - job: different_stage_echo
      variables:
        ACCOUNT_KEY: $[stageDependencies.script.azure_cli_script.outputs['output_variable.ACCOUNT_KEY']]
      steps:
        - task: Bash@3
          displayName: 'Bash :output temporary variables in same jobs on the same stage'
          inputs:
            targetType: 'inline'
            script: |
              # echo ACCOUNT_KEY
              echo "ACCOUNT_KEY is $ACCOUNT_KEY"
  • 重点:管道内变量与动静长期变量应用区别
  • Pipeline 管道内应用形式:$(变量名称)
  • 动静长期变量应用形式:$变量名称

配置 Pipeline 管道变量

应用 Azure CLI 创立 Azure Storage Account、Azure Key Vault 的内联脚本中应用治理内变量控制参数

运行 Pipeline,查看配置输入

因为咱们曾经在 azure-pipelines-1.yaml 文件中指定了工作分支 “remote_stats”,当咱们只有触发 “remote_stats” 分支的 “push” 或者 “pull_request” 动作都会触发 Azure DevOps Pipeline 的运行。
雷同 stage 内的 job 输入:

不同 stage 的 job 输入:

总结

本期试验,咱们学习了如何在 Azure DevOps Pipeline 运行期间创立的动静长期变量以及变量的输入,使得咱们更加灵便的在任意 job 中申明自定义的动静长期变量,并将动静长期变量利用到任意的 job 中,这种形式有区别与Pipeline 管道内变量,尤其是在定义阶段和应用语法上,具体内容参考官网文档。

相干链接:

  • 在脚本中设置变量
    https://docs.microsoft.com/zh…
  • github 代码地址
    https://github.com/yunqian44/…
  • Terraform 在 Azure DevOps 中的应用系列https://www.cnblogs.com/Allen…

微软最有价值专家(MVP)

微软最有价值专家是微软公司授予第三方技术专业人士的一个寰球奖项。29年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和教训而取得此奖项。

MVP 是通过严格筛选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的激情并乐于助人的专家。MVP 致力于通过演讲、论坛问答、创立网站、撰写博客、分享视频、开源我的项目、组织会议等形式来帮忙别人,并最大水平地帮忙微软技术社区用户应用 Microsoft 技术。
更多详情请登录官方网站:https://mvp.microsoft.com/zh-cn


长按辨认二维码

关注微软中国MSDN


推荐阅读
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • delphi控件大全
    本文章已收录于:delphi控件查询:http:www.torry.nethttp:www.jrsoftware.orgTb97最有名的工具条(ToolBar) ... [详细]
  • 本文翻译自:WhatisaMavenartifact?什么是神器?为什么Maven需要它?#1楼参考:https:sta ... [详细]
  • 最近用python写了一个小程序,想发布出去让人试用又不想暴露源码,搜索了一下发现将py文件编译成pyd文件就能达到目的。转换过程很简单,但是在调用pyd文件并且打包为单个exe文 ... [详细]
  • 最近学习了数据挖掘常用的两种算法:FP-Growth和K-Means。现在把我的学习结果分享给大家。以下是本文的目录,大家可以根据需要跳过一些章节:1.FP-Grow ... [详细]
  • 如何实现Percona Mysql Galera多读写集群的部署
    本篇文章给大家主要讲的是关于如何实现PerconaMysqlGalera多读写集群的部署的内容,感兴趣的话就一起来看看这篇文章吧,相信看完如何实现PerconaMysq ... [详细]
  • 来自DELL的一封信件DellPowerEdge控制器通知尊贵的Dell客户:Dell承诺,将主动通知客户有关从Dell或Dell授权经销商处购买的产品的重要更新事宜 ... [详细]
  • jcip里scalability的定义:Scalabilitydescribestheabilitytoimprovethroughputorcapacitywh ... [详细]
  • 怎么把Jenkins 服务配置为流水线源? |云效流水线Flow
    云效Flow支持将Jenkins服务配置为流水线源,流水线源,作为Flow流水线的输入源头,可以从文件托管服务或者其他第三方服务中获取原料,并将这些原料放入到工作区。那么我们该如何 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • x86 linux的进程调度,x86体系结构下Linux2.6.26的进程调度和切换
    进程调度相关数据结构task_structtask_struct是进程在内核中对应的数据结构,它标识了进程的状态等各项信息。其中有一项thread_struct结构的 ... [详细]
  • flutter插件搜索及最新依赖包查找
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了flutter插件搜索及最新依赖包查找相关的知识,希望对你有一定的参考价值。一.flutter中包和插件搜索平台 ... [详细]
author-avatar
朱甜520_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有