मेरे पास एक समाधान है जिसमें निम्नलिखित शामिल हैं:

  • कई Asp.net प्रोजेक्ट्स (माइक्रोसर्विसेज और गेटवे)

  • .net कोर + कोणीय 8 (फ्रंट एंड)

जब मैं विजुअल स्टूडियो में बिल्ड बटन दबाता हूं तो प्रत्येक प्रोजेक्ट बनाया जाता है। मैंने एक रेपो बनाया है और समाधान अपलोड किया है। अब मैं यह पता लगाने की कोशिश कर रहा हूं कि प्रत्येक माइक्रोसर्विस बनाने के लिए पाइपलाइन कैसे सेट करें और उन्हें अलग-अलग एज़ूर वेब ऐप्स पर तैनात करें।

मेरे पास कोणीय परियोजना के लिए निम्नलिखित पाइपलाइन है। क्या मुझे इस तरह के अलग-अलग कार्यों को परिभाषित करना चाहिए? क्या यहां विजुअल स्टूडियो बिल्ड को दोहराने का कोई तरीका है?

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: Npm@1
  inputs:
    command: install
    workingDir: 'd:\a\1\s\Ok.Web\ClientApp'

- task: Npm@1
  inputs:
    command: custom
    workingDir: 'd:\a\1\s\Ok.Web\ClientApp'
    customCommand: run build

- task: CopyFiles@2
  inputs:
    targetFolder: '$(Build.ArtifactStagingDirectory)'    

- task: PublishBuildArtifacts@1
2
techno 9 अप्रैल 2020, 11:36

1 उत्तर

सबसे बढ़िया उत्तर

आप यहां दो तरीकों में से एक लागू कर सकते हैं:

  1. पूरे रेपो के लिए एक पाइपलाइन
  2. परियोजना के लिए एक पाइपलाइन

दोनों चीजों में आप खुद को फिर से दोहराने से बचने के लिए टेम्प्लेट का उपयोग कर सकते हैं। तो आप .NET प्रोजेक्ट के निर्माण के लिए सामान्य कार्यों को परिभाषित करेंगे और फिर उन्हें पाइपलाइन में उपयोग करेंगे। मैंने हाल ही में इस के बारे में ब्लॉग पोस्ट किया है, लेकिन कृपया दस्तावेज़ीकरण भी।

इसे प्राप्त करने के लिए आपको पहले सामान्य चरणों के साथ एक yaml फ़ाइल को परिभाषित करने की आवश्यकता है। उदाहरण के लिए:

parameters:
- name: buildConfiguration # name of the parameter; required
  default: 'Release'
- name: projectFolder
  default: ' '

steps:

- task: DotNetCoreCLI@2
  displayName: Restore nuget packages
  inputs:
    command: restore
    projects: '*.csproj'
    workingDirectory: '${{ parameters.projectFolder}}'

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '${{ parameters.projectFolder}}'
    arguments: '--configuration ${{ parameters.buildConfiguration }}'

# You just added coverlet.collector to use 'XPlat Code Coverage'
- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '*Tests/*.csproj'
    arguments: '--configuration ${{ parameters.buildConfiguration }} --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true'
    workingDirectory: '${{ parameters.projectFolder}}'

- task: DotNetCoreCLI@2
  inputs:
    command: custom
    custom: tool
    arguments: install --tool-path . dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

- script: ./reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:${{ parameters.projectFolder}}/coverlet/reports -reporttypes:"Cobertura"
  displayName: Create reports

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: ${{ parameters.projectFolder}}/coverlet/reports/Cobertura.xml  

और फिर इस फ़ाइल को मुख्य बिल्ड फ़ाइल से आमंत्रित करें:

variables:
  buildConfiguration: 'Release'
  projectFolder: 'path to your project'

steps:

- template: build-and-test.yaml
  parameters:
      buildConfiguration: $(buildConfiguration)

- script: echo Some steps to create artifacts!
  displayName: 'Run a one-line script'

दृष्टिकोण संख्या 1 में आप सभी प्रोजेक्ट का निर्माण करेंगे, भले ही आप केवल एक प्रोजेक्ट बदलते हैं, इसलिए मैं आपको नंबर 2 पर पहुंचने की सलाह दूंगा। इसके लिए आप कई पाइपलाइन (प्रति प्रोजेक्ट एक) को परिभाषित कर सकते हैं और विशिष्ट फ़ोल्डर में परिवर्तन के लिए ट्रिगर को सीमित कर सकते हैं। कृपया एक नज़र डालें यहां.

यहां आपके पास एक उदाहरण है कि आप मास्टर शाखा के लिए विशिष्ट फ़ोल्डर में ट्रिगर को कैसे सीमित कर सकते हैं:

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - gated-checkin-with-template/*
    exclude:
    - gated-checkin-with-template/azure-pipelines-gc.yml
5
Krzysztof Madej 9 अप्रैल 2020, 12:22