当前位置: 首页 > article >正文

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

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/headssystem.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_scandisplayName: 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_publishpool: AD.US.AgentPools.WNPdisplayName: Build & PublishdependsOn: veracode_scancondition: and(succeeded(), eq(variables.ShouldPublish, true))steps:- task: NodeTool@0inputs:versionSpec: '20.x'displayName: 'Install node.js'- task: Npm@1displayName: npm installinputs:command: customcustomCommand: 'install -force'- task: Npm@1displayName: npm run buildinputs:command: 'custom'customCommand: 'run build'- task: Npm@1displayName: 'Run Unit Test'inputs:command: customverbose: falsecustomCommand: 'run test-headless'continueOnError: true- task: PublishTestResults@2displayName: '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/javascripttrigger:- "main"- "rc/*"- "hf/*"#----- Pipeline run description
name: $(Build.SourceBranchName).UI.$(Date:yyyyMMdd)$(Rev:.r)variables:ROOT_PATH: refs/headssystem.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_scandisplayName: Veracode Scan#dependsOn: format_linting_check#condition: and(not(failed()), ne(variables['skip.veracode.scan'], 'true'))condition: ne(variables['skip.veracode.scan'], 'true')#----- Job variablesvariables:scanFileName: $(COMPONENT_PROJ)_scanSandbox_Name: a360-corpro-uisteps:- task: CopyFiles@2displayName: Stage codeinputs:SourceFolder: '$(Build.SourcesDirectory)'Contents: |src/**TargetFolder: '$(Build.ArtifactStagingDirectory)'CleanTargetFolder: trueOverWrite: true- task: ArchiveFiles@2displayName: Compress code (zip)inputs:rootFolderOrFile: "$(Build.ArtifactStagingDirectory)"includeRootFolder: truearchiveType: "zip"archiveFile: "$(Build.ArtifactStagingDirectory)/$(scanFileName).zip"replaceExistingArchive: true- task: Bash@3displayName: List zip file and contentsinputs:targetType: "inline"script: |cd $(Build.ArtifactStagingDirectory)ls -altrR- task: PowerShell@2displayName: '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@3displayName: Request veracode scaninputs: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_publishpool: Build.PooldisplayName: Build & PublishdependsOn: veracode_scancondition: and(succeeded(), eq(variables.ShouldPublish, true))steps:- task: NodeTool@0inputs:versionSpec: '20.x'displayName: 'Install node.js'- task: Npm@1displayName: npm installinputs:command: customcustomCommand: 'install -force'- task: Npm@1displayName: npm run buildinputs:command: 'custom'customCommand: 'run build'- task: Npm@1displayName: 'Run Unit Test'inputs:command: customverbose: falsecustomCommand: 'run test-headless'continueOnError: true- task: PublishTestResults@2displayName: 'Publish Test Results'inputs:testResultsFormat: 'JUnit'testResultsFiles: '$(Build.SourcesDirectory)/TESTS-*.xml'- task: PublishCodeCoverageResults@1displayName: 'Publish code coverage'inputs:codeCoverageTool: 'Cobertura'summaryFileLocation: '$(Build.SourcesDirectory)/coverage/**/*.xml'# Copy files from build agent to container- task: CopyFiles@2displayName: 'Copy Files'inputs:SourceFolder: '$(Build.SourcesDirectory)/dist'Contents: '**'TargetFolder: '$(Build.ArtifactStagingDirectory)'#Publish container in the pipeline- task: PublishPipelineArtifact@1displayName: 'Publish UI Artifacts'inputs:targetPath: '$(Build.ArtifactStagingDirectory)'artifactName: 'drop'publishLocation: pipeline

相关文章:

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

Azure DevOps针对Angular项目创建build版本的yaml,并通过变量控制相应job的执行与否。 注意事项:代码前面的空格是通过Tab控制的而不是通过Space控制的。 yaml文件中包含一下内容: 1. 自动触发build 通过指定code branch使提交到此代码库的…...

Web 架构之负载均衡全解析

文章目录 一、引言二、思维导图三、负载均衡的定义与作用定义作用1. 提高可用性2. 增强性能3. 实现扩展性 四、负载均衡类型硬件负载均衡代表设备优缺点 软件负载均衡应用层负载均衡代表软件优缺点 网络层负载均衡代表软件优缺点 五、负载均衡算法轮询算法(Round Ro…...

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

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

金丝雀/灰度/蓝绿发布的详解

以下是 金丝雀发布、灰度发布 和 蓝绿发布 的详细解析,涵盖核心原理、技术实现、适用场景及实际案例: 1. 金丝雀发布 (Canary Release) 核心原理 渐进式流量切换:将新版本部署到生产环境后,逐步将用户流量从旧版本迁移到新版本&…...

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

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

git 多个提交记录合并为一个

1.场景 有时候用devops等平台测试问题,需要多次修改小的记录提交,但是最终我们在合并主干的时候不想留那么多乱七八糟的记录,就需要在此分支合并这些提交记录,再合并到主干。 2.交互式变基 2.1 确定要合并的提交范围 # 查看最近…...

深入理解栈数据结构(Java实现):从原理到实战应用

在计算机科学的世界里,数据结构是构建高效程序的基石,而栈作为其中最基础且应用广泛的一种数据结构,其独特的 “后进先出(LIFO)” 特性,使其在众多领域发挥着关键作用。从算法设计到编译器实现,…...

支付宝 SEO 优化:提升小程序曝光与流量的完整指南

在拥有庞大用户基数的支付宝平台上,小程序已成为商家触达用户、提供服务的重要渠道。然而,随着平台上小程序数量的快速增长,如何在激烈的竞争中脱颖而出,获得更多的曝光和流量,成为每个开发者和运营者必须面对的关键挑…...

【leetcode100】最长重复子数组

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

代码随想录算法训练营第五十六天| 图论2—卡码网99. 岛屿数量(dfs bfs)

假期归来继续刷题,图论第二天,主要是进一步熟悉dfs 和 bfs 的运用。 99. 岛屿数量(dfs) 99. 岛屿数量 ACM模式还是需要练,不过现在输入输出的感觉已经比较熟悉了。首先是要按照输入搭建一个grid,然后有一…...

源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统

目录 一、系统架构设计 1、技术分层 2、开发环境 二、快速开发实践 1、后端搭建(Spring Boot) 2、前端管理端(VueElementUI) 3、移动端开发(UniAPP) 三、关键集成方案 1、统一接口处理 2、跨平台…...

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

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

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

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

kubectl系列(十一):top 查询pod连接数

在 Kubernetes 中,kubectl top 命令默认仅支持查看 Pod 或节点的 CPU/内存资源使用情况,并不直接提供 TCP 连接数的统计功能。若要获取 Pod 的 TCP 连接数,需结合其他工具和方法。以下是具体实现方案: 1. 直接进入容器查看 TCP 连…...

关于Spring

目录 事务篇 事务篇 先说结论 Spring事务实际上依赖的是Transactional接口和数据库的事务实现。 举个例子说,比如我们现在有一个**Service1类,这个类的方法MethodA执行一个向表A中插入数据;还有一个**Service2类,这个类的方法M…...

小家电专用WD5201 非隔离AC-DC稳压器|宽压80-305V|三档输出2.7/3.3/5V|多重安全保护

小家电专用WD5201 AC-DC稳压器|宽压80-305V|三档输出2.7/3.3/5V|多重安全保护 💥 WD5201,小家电电源的智能“稳压卫士”! ✨ 核心卖点: ✅ 宽压兼容:输入 80-305V AC,电网…...

Docker 核心目录结构

1. Docker 核心目录结构 数据存储目录 默认根目录:/var/lib/docker Docker 所有运行时数据(镜像、容器、卷、网络配置等)的默认存储位置。 bash 复制 下载 # 查看 Docker 数据根目录 docker info | grep "Docker Root Dir" # 输出…...

源码分析之Leaflet中的LayerGroup

概述 LayerGroup是一个图层组,通过继承Layer基类,提供了一种管理多个图层(如标记、多边形等)的容器机制,比如地图的添加/移除操作等。 源码分析 源码实现 LayerGroup的源码实现如下: export var Layer…...

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

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

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

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

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

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

基于阿里云DataWorks的物流履约时效离线分析

基于阿里云DataWorks的物流履约时效离线分析2. 数仓模型构建 ORC和Parquet区别: 压缩率与查询性能 压缩率 ORC通常压缩率更高,文件体积更小,适合存储成本敏感的场景。 Parquet因支持更灵活的嵌套结构,压缩率略…...

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,下载好的数据集文件如下…...

Elasticsearch内存管理与JVM优化:原理剖析与最佳实践

#作者:孙德新 文章目录 一、Elasticsearch缓存分类1、Node Query Cache:2、Shard Request Cache:3、Fielddata Cache: 三、内存常见的问题案例一案例二案例三案例四 四、内参分配最佳实践1、jvm heap分配2、将机器上少于一半的内…...

独立按键控制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就可…...