I have multiple solution in Project. I need to deploy only those solution where the dev team has made changes.
First of all is it possible? If yes then how we can achieve it.
We create a build pipelines and a release pipeline and thought it will copy only updated files but it is copying all the artifacts.
We are expecting it should copy only updated dll’s.
user26393142 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Assuming you have a repo with the mulitple solutions in different paths like those in the image below;
Based on your requriment, you may run git diff
command to know which path the change commit is pushed into, so as to determine whether to build those solutions or not.
Here is a sample YAML pipeline for your reference.
parameters:
- name: SLNs
type: object
default:
- Solution1
- Solution2
stages:
- stage: CI
jobs:
- job: Build
steps:
- checkout: self
fetchDepth: 0 # Set fetchDepth as 0 to disable default shallowfetch and make sure git diff command works
- ${{ each SLN in parameters.SLNs }}:
- powershell: |
Write-Host "Build.SourceVersion is $(Build.SourceVersion)"
# Check if there are changes in ${{SLN}}
if (git diff --name-only $(Build.SourceVersion)^ $(Build.SourceVersion) -- ${{SLN}}) {
Write-Host "Changes detected in ${{SLN}}"
Write-Host "##vso[task.setvariable variable=build${{SLN}}]True"
}
else {
Write-Host "No changes detected in ${{SLN}}"
}
displayName: 'Determine to Build ${{SLN}}'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '${{SLN}}/*.sln'
arguments: '-o:$(Build.BinariesDirectory)'
displayName: 'Build ${{SLN}}'
condition: eq(variables['build${{SLN}}'], 'True')
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.BinariesDirectory)'
Contents: '*.dll'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
displayName: Copy .dll files
- publish: $(Build.ArtifactStagingDirectory)
artifact: drop
- stage: CD
jobs:
- deployment: Deploy
environment: E-Test
strategy:
runOnce:
deploy:
steps:
- script: |
tree $(Pipeline.Workspace) /F /A
displayName: Check artifacts
However, it may NOT be reliable if there are multiple commits under different paths within one single push. Therefore, it is still suggested creating seperate pipelines to be triggered by specific Paths filter and procceed to build and publish the solution in that path.