Search code examples
azureazure-devopsazure-pipelinesazure-pipelines-yaml

Building API and integration testing artifacts in Azure Devops Pipeline


I have a build pipeline in Azure Devops which has the below configuration to create an artifact for the APIs. I have a separate integration testing project which I would like to publish as part of the build pipeline.

  - task: DotNetCoreCLI@2
    displayName: Publish and Zip Project
    inputs: 
      command: publish
      arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(Build.BuildId)'
      modifyOutputPath: false
      zipAfterPublish: true
      publishWebProjects: false
      projects: '**/My.API.csproj'

  - task: PublishPipelineArtifact@1
    displayName: Publish App
    inputs:
      targetPath: $(Build.ArtifactStagingDirectory)/$(Build.BuildId)
      artifact: MyApi-Release
      publishLocation: pipeline

Can I add the below tasks to build the integration testing artifact? However is there a way to push the files for integration testing into a different directory or clean up $(Build.ArtifactStagingDirectory)/$(Build.BuildId) before it is pushed and zipped?

      - task: DotNetCoreCLI@2
    displayName: Publish and Zip Integration Testing Project
    inputs: 
        command: publish
        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(Build.BuildId)'
        modifyOutputPath: false
        zipAfterPublish: true
        publishWebProjects: false
        projects: '**/My.API.IntegrationTests.csproj'
  
  - task: PublishPipelineArtifact@1
    displayName: Publish Integration Testing App
    inputs:
        targetPath: $(Build.ArtifactStagingDirectory)/$(Build.BuildId)
        artifact: MyApi-IntTest-Release
        publishLocation: pipeline   

Solution

  • Yes of course you can add subdirectory like $(Build.ArtifactStagingDirectory)/API/$(Build.BuildId) and $(Build.ArtifactStagingDirectory)/Integration/$(Build.BuildId)

      - task: DotNetCoreCLI@2
        displayName: Publish and Zip Project
        inputs: 
          command: publish
          arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/API/$(Build.BuildId)'
          modifyOutputPath: false
          zipAfterPublish: true
          publishWebProjects: false
          projects: '**/My.API.csproj'
    
      - task: PublishPipelineArtifact@1
        displayName: Publish App
        inputs:
          targetPath: $(Build.ArtifactStagingDirectory)/API/$(Build.BuildId)
          artifact: MyApi-Release
          publishLocation: pipeline
    

    and

      - task: DotNetCoreCLI@2
        displayName: Publish and Zip Integration Testing Project
        inputs: 
            command: publish
            arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/Integration/$(Build.BuildId)'
            modifyOutputPath: false
            zipAfterPublish: true
            publishWebProjects: false
            projects: '**/My.API.IntegrationTests.csproj'
      
      - task: PublishPipelineArtifact@1
        displayName: Publish Integration Testing App
        inputs:
            targetPath: $(Build.ArtifactStagingDirectory)/Integration/$(Build.BuildId)
            artifact: MyApi-IntTest-Release
            publishLocation: pipeline   
    

    Of course you can put this in single job.