1
votes

I have the following pipeline

variables:
  azureSubscription: ...

stages:
- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  condition: succeeded()

  jobs:
  - deployment: Deploy
    displayName: Deploy
    environment: 'development'

    strategy:
      runOnce:
        deploy:

          steps:
            - task: AzureResourceGroupDeployment@2
              inputs:
                action: 'Create Or Update Resource Group'
                resourceGroupName: '...'
                location: '...'
                templateLocation: 'Linked artifact'
                csmFile: '$(Pipeline.Workspace)/azure-deploy.json'
                deploymentMode: 'Incremental'

The repo has the following files (at the root directory)

azure-pipelines.yaml
azure-deploy.json

and only a master branch.

I have tried:

azure-deploy.json
**azure-deploy.json
**/*azure-deploy.json
$(Build.SourcesDirectory)/azure-deploy.json
$(Pipeline.Workspace)/azure-deploy.json
$(System.DefaultWorkingDirectory)/azure-deploy.json

Having read:

to no avail. Any ideas?

Update: I have added a publish pipeline as suggested by @ShaykiAbramczyk Now I get a Template file pattern matches a directory instead of a file: /home/vsts/work/1/azure-deploy.json

- stage: Build
  displayName: Build stage

  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)

    steps:
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Pipeline.Workspace)'
        artifact: 'azure-deploy.json'
        publishLocation: 'pipeline'
4
It's deploymet job, the sourced from master not get into the agent, you should include the json file in the build artifacts.Shayki Abramczyk
@ShaykiAbramczyk how do you do that? I tried using a bash script to copy the file during the build stage but it tells me the file is already thereKoenig Lear
@ShaykiAbramczyk cp: 'azure-deploy.json' and '/home/vsts/work/1/s/azure-deploy.json' are the same fileKoenig Lear
can you share your whole pipeline? it should be done with pipeline artifacts docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/…Shayki Abramczyk
@ShaykiAbramczyk see above. Seems to be in the right direction.Koenig Lear

4 Answers

0
votes

Because you use deployment job the sources from the master branch didn't download into the agent.

You need to publish the files in the build stage and consume them in the deployment - with pipeline artifacts.

Or, just run the AzureResourceGroupDeployment in a regular job, than the .json file will be in the agent.

1
votes

It is a good strategy to go for the multi-stage pipelines for what you are doing.

  • Build is for composing your artifacts.
  • Deployment jobs is for the publishing part. So you are on the right track.

If you need sources during the deployment jobs then use the checkout step to fetch the sources. ref. Repo Checkout docs.

Just my two cents

1
votes

"A deployment job doesn't automatically clone the source repo. You can checkout the source repo within your job with checkout: self." Source: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops

Example from my setup, I put checkout: self as the first step and now my repository is cloned before before executing the Azure PowerShell:

    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: self
          - task: AzurePowerShell@5
            displayName: Setup Network
            inputs:

0
votes

My objective was to create a Blank and Starter Resource Group in Azure and nothing else. And this was repeatedly giving me the error

Template file pattern matches a directory instead of a file: /home/vsts/work/1/s

And thats what got me here.

I finally sorted that out with Stringfello's

- checkout self 

step.

My full pipeline is as follows.

variables:
- name: finalBuildArtifactName
  value: 'aspNetCoreDropFromYaml123'
- name: BuildParameters.RestoreBuildProjects
  value: '**/*.csproj'
- name: BuildParameters.TestProjects
  value: '**/*[Tt]ests/*.csproj'
- name: buildConfiguration
  value: 'Release'

trigger:
- master

name: $(date:yyyyMMdd)$(rev:.r)

stages:

  - stage: Build ##Basically prints out some vars and copies the template files.
    jobs:
      - job: buildWebApp  
        displayName: Build Stage for somepurpose
        pool:
          vmImage: ubuntu-latest

        steps:
        - script: |
            echo build.artifactstagingdirectory and build.buildnumber are as follows.
            echo $(build.artifactstagingdirectory) $(build.buildnumber)
            echo $(projects)
            echo $(BuildConfiguration)
            echo Pipeline.Workspace is $(Pipeline.Workspace)
            echo The current branch is - $(Build.SourceBranchName)!!.
            echo $(finalBuildArtifactName)
            echo "This is the build pipe line. This produces the necessary artifacts for subsequent release pipeline."
          displayName: 'Command Line Script to write out some vars'

        - powershell: |
            # Write your PowerShell commands here.
            Write-Host "This is from power shell command task"
            Write-Host "This writes out the env vars"
            get-childitem -path env:*
          displayName: 'PowerShell script to write out env vars'

        # The following task is needed. This copies the arm template files. 
        # Created these templates from Visual studio 2019 as follows.
        # Right click your solution and Add -> New Project -> Azure Resource Group and gave the name Vivek_Aks_Rg
        - task: CopyFiles@2 
          inputs:
            SourceFolder: 'iac/ArmTemplates/Vivek_Aks_Rg/'
            Contents: 'azuredeploy*.json'
            TargetFolder: '$(build.artifactStagingDirectory)/ArmTemplates'

        - task: PublishBuildArtifacts@1
          displayName: Publish Artifact
          condition: succeededOrFailed()
          inputs:
            PathtoPublish: '$(build.artifactstagingdirectory)'
            ArtifactName: '$(finalBuildArtifactName)'
            PublishLocation: 'Container' 


  - stage: DeployToDev
    displayName: Deploy to Dev Env
    jobs:
      - deployment: 
          
        pool:
          vmImage: ubuntu-latest
        environment: Dev
        strategy: 
         runOnce:
           deploy:
             steps:
              - checkout: self

              - task: AzureResourceManagerTemplateDeployment@3
                displayName: 'Create Azure App Service in a Given Resource Group'
                inputs:
                  deploymentScope: 'Subscription'
                  azureResourceManagerConnection: 'Pay-As-You-Go(123YourSubscriptionId)'
                  subscriptionId: '123YourSubscriptionId'
                  action: 'Create Or Update Resource Group'
                  resourceGroupName: 'YourResourceGroupName'
                  location: 'Central India'
                  csmFile: '$(Pipeline.Workspace)/$(finalBuildArtifactName)/ArmTemplates/azuredeploy.json'
                  csmParametersFile: '$(Pipeline.Workspace)/$(finalBuildArtifactName)/ArmTemplates/azuredeploy.parameters.json'
                  deploymentMode: 'Incremental'