user3067684
user3067684

Reputation: 1258

azure piplines yaml config

I am trying to improve the CI/CD process of an old funky project whose code is not open to refactoring at the moment. I just cant get this to work following the Azure documentation or even if it is possible.

I have been able to improve the current state with an azure pipeline file that runs unit tests before merging into releases/dev branch. But i want to further.

Tasks every PR into releases/dev will:

  1. script: npm run test:unit
  2. script: npm run build:dev
  3. copy/publish the contents of the .div/ folder to a azure blob store config for static site

Any PR or merge into releases/staging will:

  1. script: npm run build:staging
  2. copy/publish the contents of the .div/ folder to a azure blob store config for static site

Any PR or merge into master will:

  1. script: npm run test:unit
  2. script: npm run build:production
  3. copy/publish the contents of the .div/ folder to a azure blob store config for static site

I have 3 questions

Is this possible within a single yaml file?

How do i run different task for different branches, I've defined jobs/stages but cant get them to be conditional?

Is there some magic anyone can direct me to that lets me copy the content of a directory to a blob store? Or must it be zipped->copied->un zipped?

Thanks in advance from a new sleep deprived dad

Upvotes: 0

Views: 133

Answers (1)

Kevin Lu-MSFT
Kevin Lu-MSFT

Reputation: 35139

Is this possible within a single yaml file? How do i run different task for different branches, I've defined jobs/stages but cant get them to be conditional?

Of course. You could add these stages in a single yaml file. Then you need to define the condiftion field for each stage or each job.

Here is an example for stages:

trigger:
- '*'

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: Test1
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/master') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/master'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage1!

- stage: Test2
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/dev') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/dev'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage2!


- stage: Test3
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/staging') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/staging'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage3!

You could set required branches as trigger. Then you could use the Build.SourceBranch and System.PullRequest.TargetBranch to determine whether to run the current stage.

Build.SourceBranch -> for merge branch.

System.PullRequest.TargetBranch -> for Pull Request.

Here are the docs about conditions and variables.

Is there some magic anyone can direct me to that lets me copy the content of a directory to a blob store? Or must it be zipped->copied->un zipped?

Since you need to publish file to Azure Blob, you could directly try to use the Azure File Copy task.

Here is an example:

- task: AzureFileCopy@4
  displayName: 'AzureBlob File Copy'
  inputs:
    SourcePath: xxx
    azureSubscription: xxx
    Destination: AzureBlob
    storage: xxx
    ContainerName: '$web'

Hope this helps.

Upvotes: 1

Related Questions