Microsoft Azure DevOps针对Angular项目创建build版本的yaml

news2025/5/13 9:05:55

Azure DevOps针对Angular项目创建build版本的yaml,并通过变量控制相应job的执行与否。

注意事项:代码前面的空格是通过Tab控制的而不是通过Space控制的。

 

yaml文件中包含一下内容: 

1. 自动触发build

通过指定code branch使提交到此代码库的代码自动build

trigger:
  - "main"
  - "rc/*"
  - "hf/*"

2. 指定build的code branch

如指定main、master,即只有main、master代码库才支持发布Artificats。

variables:
  ROOT_PATH: refs/heads
  system.debug: 'true'
  COMPONENT_PROJ: 'corpro-ui'
  ShouldPublish: $[or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), contains(variables['Build.SourceBranch'], 'refs/heads/rc'), contains(variables['Build.SourceBranch'], 'refs/heads/hf'))]

3. 集成Veracode Scan

用于检测包版本的缺陷。 可通过参数启用或者禁止。

  - job: veracode_scan
    displayName: Veracode Scan
    #dependsOn: format_linting_check
    #condition: and(not(failed()), ne(variables['skip.veracode.scan'], 'true'))
    condition: ne(variables['skip.veracode.scan'], 'true') # skip.veracode.scan参数用于控制收否执行ceracode_scan这个Job

Veracode Scan是收费的。

4. 编译和发布到Artifacts

variables.ShouldPublish控制是否要发布到Artifacts

  #------------------------------
  #     Build & Publish
  #------------------------------
  - job: build_publish
    pool: AD.US.AgentPools.WNP
    displayName: Build & Publish
    dependsOn: veracode_scan
    condition: and(succeeded(), eq(variables.ShouldPublish, true))
    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: '20.x'
        displayName: 'Install node.js'
      - task: Npm@1
        displayName: npm install
        inputs:
          command: custom
          customCommand: 'install -force'
      - task: Npm@1
        displayName: npm run build
        inputs:
          command: 'custom'
          customCommand: 'run build'
      - task: Npm@1
        displayName: 'Run Unit Test'
        inputs:
          command: custom
          verbose: false
          customCommand: 'run test-headless'
        continueOnError: true
      - task: PublishTestResults@2
        displayName: 'Publish Test Results'
        inputs:
          testResultsFormat: 'JUnit'
          testResultsFiles: '$(Build.SourcesDirectory)/TESTS-*.xml'

5. 完整yaml代码

 完整yaml文件如下:

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
  - "main"
  - "rc/*"
  - "hf/*"

#----- Pipeline run description
name: $(Build.SourceBranchName).UI.$(Date:yyyyMMdd)$(Rev:.r)

variables:
  ROOT_PATH: refs/heads
  system.debug: 'true'
  COMPONENT_PROJ: 'corpro-ui'
  ShouldPublish: $[or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), contains(variables['Build.SourceBranch'], 'refs/heads/rc'), contains(variables['Build.SourceBranch'], 'refs/heads/hf'))]
jobs:
  #-------------------------------------
  #     Code Format & Linting Check
  #-------------------------------------
  # - job: format_linting_check
  #   displayName: Code Format & Linting Check
  # #  condition: eq(variables['Build.Reason'], 'PullRequest')
  #   steps:
  #     - task: Npm@1
  #       displayName: npm install
  #       inputs:
  #         command: custom
  #         customCommand: 'install -force'
  #     - task: Npm@1
  #       displayName: 'Perform prettier format check'
  #       inputs:
  #         command: custom
  #         verbose: false
  #         customCommand: 'run prettier'
  #     - task: Npm@1
  #       displayName: 'Perform eslint linting check'
  #       inputs:
  #         command: custom
  #         verbose: false
  #         customCommand: 'run lint'
  #-----------------------
  #     Veracode Scan
  #-----------------------
  - job: veracode_scan
    displayName: Veracode Scan
    #dependsOn: format_linting_check
    #condition: and(not(failed()), ne(variables['skip.veracode.scan'], 'true'))
    condition: ne(variables['skip.veracode.scan'], 'true')

    #----- Job variables
    variables:
      scanFileName: $(COMPONENT_PROJ)_scan
      Sandbox_Name: a360-corpro-ui
    steps:
      - task: CopyFiles@2
        displayName: Stage code
        inputs:
          SourceFolder: '$(Build.SourcesDirectory)'
          Contents: |
            src/**
          TargetFolder: '$(Build.ArtifactStagingDirectory)'
          CleanTargetFolder: true
          OverWrite: true
      - task: ArchiveFiles@2
        displayName: Compress code (zip)
        inputs:
          rootFolderOrFile: "$(Build.ArtifactStagingDirectory)"
          includeRootFolder: true
          archiveType: "zip"
          archiveFile: "$(Build.ArtifactStagingDirectory)/$(scanFileName).zip"
          replaceExistingArchive: true

      - task: Bash@3
        displayName: List zip file and contents
        inputs:
          targetType: "inline"
          script: |
            cd $(Build.ArtifactStagingDirectory)
            ls -altrR

      - task: PowerShell@2
        displayName: 'Veracode - check for sandbox'
        condition: ne(variables['skip.veracode.scan'], 'true')
        inputs:
          targetType: 'inline'
          script: |
            if ("${env:BUILD_SOURCEBRANCH}" -ne "$(ROOT_PATH)/main"){
              Write-Host "Set to sandbox Veracode scanning"
              Write-Host "##vso[task.setvariable variable=scanTosandbox;]true"
              Write-Host "##vso[task.setvariable variable=sboxName]"$(Build.DefinitionName)
            }
            else{
              Write-Host "Set to actual Veracode scanning"
              Write-Host "##vso[task.setvariable variable=scanTosandbox]false"
              Write-Host "##vso[task.setvariable variable=sboxName]"
            }

      - task: Veracode@3
        displayName: Request veracode scan
        inputs:
          ConnectionDetailsSelection: "Service Connection"
          AnalysisService: "Veracode-azdoagency"
          veracodeAppProfile: "$(system.teamProject)"
          version: "$(build.buildNumber)"
          filepath: "$(Build.ArtifactStagingDirectory)/$(scanFileName).zip"
          #sandboxName: '$(sboxName)'
          sandboxName: "a360-corpro-ui"
          createSandBox: $(scanTosandbox)
          maximumWaitTime: "60"

  #------------------------------
  #     Build & Publish
  #------------------------------
  - job: build_publish
    pool: Build.Pool
    displayName: Build & Publish
    dependsOn: veracode_scan
    condition: and(succeeded(), eq(variables.ShouldPublish, true))
    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: '20.x'
        displayName: 'Install node.js'
      - task: Npm@1
        displayName: npm install
        inputs:
          command: custom
          customCommand: 'install -force'
      - task: Npm@1
        displayName: npm run build
        inputs:
          command: 'custom'
          customCommand: 'run build'
      - task: Npm@1
        displayName: 'Run Unit Test'
        inputs:
          command: custom
          verbose: false
          customCommand: 'run test-headless'
        continueOnError: true
      - task: PublishTestResults@2
        displayName: 'Publish Test Results'
        inputs:
          testResultsFormat: 'JUnit'
          testResultsFiles: '$(Build.SourcesDirectory)/TESTS-*.xml'
      - task: PublishCodeCoverageResults@1
        displayName: 'Publish code coverage'
        inputs:
          codeCoverageTool: 'Cobertura'
          summaryFileLocation: '$(Build.SourcesDirectory)/coverage/**/*.xml'
      # Copy files from build agent to container
      - task: CopyFiles@2
        displayName: 'Copy Files'
        inputs:
          SourceFolder: '$(Build.SourcesDirectory)/dist'
          Contents: '**'
          TargetFolder: '$(Build.ArtifactStagingDirectory)'
      #Publish container in the pipeline
      - task: PublishPipelineArtifact@1
        displayName: 'Publish UI Artifacts'
        inputs:
          targetPath: '$(Build.ArtifactStagingDirectory)'
          artifactName: 'drop'
          publishLocation: pipeline

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2373675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统管理与编程16:PXE自动化安装部署centos7.9操作系统

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 0.准备 1)防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…

如何通过ABAP获取SAP生产订单的目标成本

SAP存储生产订单成本的主要底表包括: COBK: CO凭证表头COEP: CO凭证行项目COSS: 来自CO内部的汇总数据COSP: 来自CO外部部的汇总数据 先说结论:SAP 对生产订单的目标成本是没有保存到底表的。那么如何通过代码的方式获取呢? K_KKB_KKBCS_O…

【leetcode100】最长重复子数组

1、题目描述 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: 输入:nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出:3 解释:长度最长的公共子数组是 [3,2,1] 。示例 2&…

基于Django框架的股票分红数据爬虫和展示系统

项目截图 一、项目简介 本项目是一个基于 Django 框架的股票分红数据爬虫和展示系统。它可以从东方财富网站爬取股票分红数据,并将数据存储到 Django 数据库中,同时提供数据查询、导出和图表展示功能。该系统为用户提供了一个方便的平台,用于…

QT高级(1)QTableView自定义委托集合,一个类实现若干委托

自定义委托集合 1同系列文章2 功能3 源码 1同系列文章 QT中级(1)QTableView自定义委托(一)实现QSpinBox、QDoubleSpinBox委托 QT中级(2)QTableView自定义委托(二)实现QProgressBar委…

小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?

在科技飞速发展的今天,半导体行业作为信息技术的核心领域之一,其发展速度和创新水平对全球经济的发展具有举足轻重的影响。然而,随着芯片制造工艺的不断进步,传统的单片集成方式逐渐遇到了技术瓶颈,如摩尔定律逐渐逼近…

普通IT的股票交易成长史--股价起伏的真相-缺口(2)

声明:本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…

MindSpore框架学习项目-ResNet药物分类-模型优化

目录 5.模型优化 5.1模型优化 6.结语 参考内容: 昇思MindSpore | 全场景AI框架 | 昇思MindSpore社区官网 华为自研的国产AI框架,训推一体,支持动态图、静态图,全场景适用,有着不错的生态 本项目可以在华为云modelar…

Kubernetes(k8s)学习笔记(八)--KubeSphere定制化安装

1执行下面的命令修改上一篇中yaml文件来实现定制化安装devops kubectl edit cm -n kubesphere-system ks-installer 主要是将devops几个配置由False改为True 然后使用下面的命令查看安装日志 kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l …

养生:为健康生活筑牢根基

养生并非遥不可及的目标,而是贯穿于日常生活的点滴之中。从饮食、运动到心态调节,每一个环节都对我们的健康有着重要意义。以下为你详细介绍养生的实用策略,助力你开启健康生活模式。 饮食养生:科学搭配,滋养生命 合…

Linux510 ssh服务 ssh连接

arning: Permanently added ‘11.1.1.100’ (ECDSA) to the list of known hosts. rooot11.1.1.100’s password: Permission denied, please try again. rooot11.1.1.100’s password: Permission denied, please try again 还没生效 登不上了 失效了 sshcaozx26成功登录 …

关键点检测--使用YOLOv8对Leeds Sports Pose(LSP)关键点检测

目录 1. Leeds Sports Pose数据集下载2. 数据集处理2.1 获取标签2.2 将图像文件和标签文件处理成YOLO能使用的格式 3. 用YOLOv8进行训练3.1 训练3.2 预测 1. Leeds Sports Pose数据集下载 从kaggle官网下载这个数据集,地址为link,下载好的数据集文件如下…

独立按键控制LED

目录 1.独立按键介绍 2.原理图 3.C51数据运输 解释&#xff1a;<< >> ​编辑 解释&#xff1a;& | 解释&#xff1a;^ ~ ​编辑 4.C51基本语句 5.按键的跳动 6.独立按键控制LED亮灭代码 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1…

计算机科技笔记: 容错计算机设计03 系统可信性的度量 偶发故障期 浴盆曲线 韦布尔分布

可靠性 简化表达式 偶发故障期&#xff0c;系统发生故障概率趋近于一个常数 浴盆曲线 MTTF和计算 韦布尔分布 马尔可夫链 可靠度

爬虫准备前工作

1.Pycham的下载 网址&#xff1a;PyCharm: The only Python IDE you need 2.Python的下载 网址&#xff1a;python.org&#xff08;python3.9版本之后都可以&#xff09; 3.node.js的下载 网址&#xff1a;Node.js — 在任何地方运行 JavaScript&#xff08;版本使用18就可…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.1 主流可视化工具对比(Tableau/Matplotlib/Python库)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 第七章 可视化工具集成&#xff1a;Tableau、Matplotlib与Python库深度对比7.1 主流可视化工具对比&#xff1a;技术选型的决策框架7.1.1 工具定位与核心能力矩阵7.1.2 数据…

操作系统实验习题解析 上篇

孤村落日残霞&#xff0c;轻烟老树寒鸦&#xff0c;一点飞鸿影下。 青山绿水&#xff0c;白草红叶黄花。 ————《天净沙秋》 白朴 【元】 目录 实验一&#xff1a; 代码&#xff1a; 解析&#xff1a; 运行结果&#xff1a; 实验二&#xff1a; 代码解析 1. 类设计 …

基于Arduino Nano的DIY示波器

基于Arduino Nano的DIY示波器&#xff1a;打造属于你的口袋实验室 前言 在电子爱好者的世界里&#xff0c;示波器是不可或缺的工具之一。它能够帮助我们观察和分析各种电子信号的波形&#xff0c;从而更好地理解和调试电路。然而&#xff0c;市面上的示波器价格往往较高&…

渠道销售简历模板范文

模板信息 简历范文名称&#xff1a;渠道销售简历模板范文&#xff0c;所属行业&#xff1a;其他 | 职位&#xff0c;模板编号&#xff1a;KRZ3J3 专业的个人简历模板&#xff0c;逻辑清晰&#xff0c;排版简洁美观&#xff0c;让你的个人简历显得更专业&#xff0c;找到好工作…

JAVA练习题(1) 卖飞机票

import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入飞机的票价&#xff1a;");int pricesc.nextInt();System.out.println("请输入月份&#xff1a;");…