'How to use Azure DevOps Pipelines Machine File Copy Using Environments?

I need to move files from ADO to a VM. This VM is set up using "Environments" and tagged appropriately. I would like to copy those files to that VM using its environment name and tag. So far I've only found "Windows machine file copy" which requires storing a admin login. Is there a way to use the Environments instead of hardcoding a login?



Solution 1:[1]

I have been struggling for a while with setting up an Azure Pipeline to deploy .Net Core service to VM. I had the following requirements:

  1. to use YAML files instead of classic UI
  2. to deploy as a windows service not to IIS
  3. to use stages in pipeline
  4. I was using monorepo with the service residing in MyService folder
  5. In addition I had an external NuGet feed
  6. My solution consisted of several projects and I was building only one of them
  7. appsettings.release.json was being replaced with the one persisted on the server to preserve settings

I was inspired by Bright Ran-MSFT answer and suggest my complete azure-pipelines.yml file

trigger:
  branches:
    include:
      - staging
  paths:
    include:
      - MyService

pool:
  vmImage: "windows-latest"

variables:
  solution: "MyService/MyService.sln"
  buildPlatform: "Any CPU"
  buildConfiguration: "Release"

stages:
  - stage: Build
    jobs:
      - job: BuildJob
        steps:
          - task: NuGetCommand@2
            inputs:
              restoreSolution: "$(solution)"
              feedsToUse: "config"
              nugetConfigPath: "MyService/NuGet.Config"
          - task: VSBuild@1
            inputs:
              solution: "$(solution)"
              msbuildArgs: '/t:MyService:Rebuild /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:OutDir="$(build.artifactStagingDirectory)\service_package"'
              platform: "$(buildPlatform)"
              configuration: "$(buildConfiguration)"
          - task: VSTest@2
            inputs:
              platform: "$(buildPlatform)"
              configuration: "$(buildConfiguration)"
          - task: PublishPipelineArtifact@1
            inputs:
              targetPath: '$(build.artifactStagingDirectory)\service_package'
              artifactName: "service_package"
  - stage: Deploy
    displayName: 'Deploy'
    dependsOn: Build
    condition: succeeded()
    jobs:
      - deployment: Deployment
        displayName: 'Deployment'
        environment: 'MainDeployEnv.MY_VM_SERVER'
        strategy:
          runOnce:
            deploy:
              steps:
                - task: CopyFiles@2
                  displayName: 'Copy Package to: C:\azservices\MyService\service'
                  inputs:
                    SourceFolder: '$(Pipeline.Workspace)/service_package'
                    Contents: '**'
                    TargetFolder: 'C:\azservices\MyService\service\'
                    CleanTargetFolder: true
                - task: CopyFiles@2
                  displayName: 'Replace appsettings.release.json'
                  inputs:
                    SourceFolder: 'C:\azservices\MyService\settings'
                    Contents: 'appsettings.release.json'
                    TargetFolder: 'C:\azservices\MyService\service\'
                    OverWrite: true

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Michael Klishevich