DevOps CI pipelines

207 阅读1分钟

DevOps编写一个CI的pipelines

选择trigger哪个git分支

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - RemoteReporting.Web/*
    exclude:
    - README.md
    
  • branch: 分支名
  • include: 哪些文件改动会触发CI
  • exclude: 哪些文件改动不会触发CI

初始化环境

stages:
- stage: 'Front'
  pool:
    vmImage: 'ubuntu-latest'
  jobs:
  - job: Build
    displayName: 'build Web Assets'
    
  • stages: 环境的集合
  • stage: 什么环境,前后端的stage可以写在一起
  • pool: 镜像环境
  • jobs: 当前stage执行哪些任务
  • job: 具体的job,由steps组成

选择环境,执行命令

 steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'
- script: |
      ls
      cd RemoteReporting.Web
      npm i
  displayName: 'install node modules'
- script: |
      ls
      cd RemoteReporting.Web
      cd scripts
      node ./release.js --env=Test
  displayName: 'prepare release ENV'
- script: |
      ls
      cd RemoteReporting.Web
      node --max-old-space-size=4096 node_modules/@angular/cli/bin/ng build --prod --build-optimizer --base-href=/NGSS/
  displayName: 'build community web Assets'
  • steps由task和script组成
  • script是执行的命令

归档build好的文件,并保存下来

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)/RemoteReporting.Web/dist/NGSS_Web/'
    includeRootFolder: false
    archiveType: zip
    archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
    replaceExistingArchive: true
    
  • rootFolderOrFile: build完文件的路径,$(System.DefaultWorkingDirectory)是DevOps根目录
  • archiveFile: 将打包好的artifact存放的路径

发布artifact

- task: PublishBuildArtifacts@1 
    inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 
        ArtifactName: 'drop' 
        publishLocation: 'Container'

完整示例

trigger:
  branches:
    include:
    - develop
  paths:
    include:
    - RemoteReporting.Web/*
    exclude:
    - README.md

stages:
- stage: 'Front'
  pool:
    vmImage: 'ubuntu-latest'
  jobs:
  - job: Build
    displayName: 'build Web Assets'
    steps:
    - task: NodeTool@0
      inputs:
        versionSpec: '10.x'
      displayName: 'Install Node.js'
    - script: |
          ls
          cd RemoteReporting.Web
          npm i
      displayName: 'install node modules'
    - script: |
          ls
          cd RemoteReporting.Web
          cd scripts
          node ./release.js --env=Test
      displayName: 'prepare release ENV'
    - script: |
          ls
          cd RemoteReporting.Web
          node --max-old-space-size=4096 node_modules/@angular/cli/bin/ng build --prod --build-optimizer --base-href=/NGSS/
      displayName: 'build community web Assets'
    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(System.DefaultWorkingDirectory)/RemoteReporting.Web/dist/NGSS_Web/'
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        replaceExistingArchive: true
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
        ArtifactName: 'drop'
        publishLocation: 'Container'