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

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

http://www.xdnf.cn/news/352171.html

相关文章:

  • 【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解
  • 电机密集型工厂环境下的无线通信技术选型与优化策略
  • Azure资源创建与部署指南
  • 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
  • 嵌入式openharmony标准系统中GPIO口控制详解
  • rust-candle学习笔记11-实现一个简单的自注意力
  • 前端工程化和性能优化问题详解
  • Vue3 中 ref 与 reactive 的区别及底层原理详解
  • fakebook
  • 【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理
  • 在企业级项目中高效使用 Maven-mvnd
  • 2025-05-10-FFmepg库裁切有水印的视频
  • docker 日志暴露方案 (带权限 还 免费 版本)
  • 企业如何将钉钉付款单高效集成到金蝶云星空?
  • 高频微服务面试题总结
  • 【MySQL】联合查询
  • 自适应混合索引创建与管理:一种智能数据库优化机制的研究
  • 高并发内存池(二):项目的整体框架以及Thread_Cache的结构设计
  • 怎么用idea打jar包
  • 从“山谷论坛”看AI七剑下天山
  • 集成管理工具Gitlab
  • 高清屏幕录像工具 Mirillis Action v4.45.0
  • kitty 终端ssh 命令远程无法正常输入命令
  • 第J7周:ResNeXt解析
  • 【Linux】环境变量(图文)
  • Servlet、HttpServlet 和 DispatcherServlet 区别与关系
  • SPN技术介绍
  • Redis 常见数据类型
  • 新闻发稿筛选媒体核心标准:影响力、适配性与合规性
  • 【LUT技术专题】ECLUT代码解读