DevOps Classroom notes 02/Nov/2023

Azure DevOps Service Connections

  • Lets create a service connection to docker hub
  • Navigate to Project Settings => Service Connections
    Preview
    Preview
    Preview
  • Effective Pipeline
---
trigger:
  - master

jobs:
  # - job: dotnetbuild
  #   displayName: Build dotnet code
  #   pool: default
  #   steps:
  #     - bash: "echo staging directory $(Build.ArtifactStagingDirectory) and number $(Build.BuildNumber)"
  #     - bash: env
  #     - task: DotNetCoreCLI@2
  #       displayName: build the code
  #       inputs:
  #         command: build
  #         projects: src/NopCommerce.sln
  #         configuration: Release
  #     - task: DotNetCoreCLI@2
  #       displayName: publish the nopcommerce
  #       inputs:
  #         command: publish
  #         projects: src/Presentation/Nop.Web/Nop.Web.csproj
  #         zipAfterPublish: true
  #         configuration: Release
  #         arguments: "-o $(Build.ArtifactStagingDirectory)/Published"
  #     - task: PublishBuildArtifacts@1
  #       displayName: Make artifacts available
  #       inputs:
  #         PathtoPublish: $(Build.ArtifactStagingDirectory)/Published/Nop.Web.zip
  #         ArtifactName: 'nop'
  #         publishLocation: Container
  - job: dockerbuild
    displayName: docker image build
    pool:
      name: "Azure Pipelines"
      vmImage: "ubuntu-22.04"
    steps:
      - task: Docker@2
        inputs:
          containerRegistry: 'mydockerhub'
          repository: shaikkhajaibrahim/nopfromado
          command: 'buildAndPush'
          Dockerfile: '**/Dockerfile'
          tags: "$(Build.BuildId)"


  • After every build we should see a docker image tag being published
    Preview

using variables and parameters in Azure DevOps Pipelines

---
trigger:
  - master

parameters:
  - name: containerRegistry
    displayName: Service Connection For Docker Image
    default: 'mydockerhub'

jobs:
  # - job: dotnetbuild
  #   displayName: Build dotnet code
  #   pool: default
  #   steps:
  #     - bash: "echo staging directory $(Build.ArtifactStagingDirectory) and number $(Build.BuildNumber)"
  #     - bash: env
  #     - task: DotNetCoreCLI@2
  #       displayName: build the code
  #       inputs:
  #         command: build
  #         projects: src/NopCommerce.sln
  #         configuration: Release
  #     - task: DotNetCoreCLI@2
  #       displayName: publish the nopcommerce
  #       inputs:
  #         command: publish
  #         projects: src/Presentation/Nop.Web/Nop.Web.csproj
  #         zipAfterPublish: true
  #         configuration: Release
  #         arguments: "-o $(Build.ArtifactStagingDirectory)/Published"
  #     - task: PublishBuildArtifacts@1
  #       displayName: Make artifacts available
  #       inputs:
  #         PathtoPublish: $(Build.ArtifactStagingDirectory)/Published/Nop.Web.zip
  #         ArtifactName: 'nop'
  #         publishLocation: Container
  - job: dockerbuild
    displayName: docker image build
    pool:
      name: "Azure Pipelines"
      vmImage: "ubuntu-22.04"
    steps:
      - task: Docker@2
        inputs:
          containerRegistry: "${{ parameters.containerRegistry }}"
          repository: shaikkhajaibrahim/nopfromado
          command: 'buildAndPush'
          Dockerfile: '**/Dockerfile'
          tags: "$(Build.BuildId)"


Preview
* We use paramters to give flexibility to the user to change values

  • User Defined Variables Refer Here
  • Refer Here for yaml schema
  • We have added a simple variable for docker file location
---
trigger:
  - master

parameters:
  - name: containerRegistry
    displayName: Service Connection For Docker Image
    default: 'mydockerhub'
  - name: vmImage
    displayName: Microsoft Hosted Agent Name
    default: 'ubuntu-22.04'
    values:
      - windows-2022
      - windows-2019
      - ubuntu-22.04
      - ubuntu-20.04

variables:
  dockerfilelocation: '**/Dockerfile'

jobs:
  # - job: dotnetbuild
  #   displayName: Build dotnet code
  #   pool: default
  #   steps:
  #     - bash: "echo staging directory $(Build.ArtifactStagingDirectory) and number $(Build.BuildNumber)"
  #     - bash: env
  #     - task: DotNetCoreCLI@2
  #       displayName: build the code
  #       inputs:
  #         command: build
  #         projects: src/NopCommerce.sln
  #         configuration: Release
  #     - task: DotNetCoreCLI@2
  #       displayName: publish the nopcommerce
  #       inputs:
  #         command: publish
  #         projects: src/Presentation/Nop.Web/Nop.Web.csproj
  #         zipAfterPublish: true
  #         configuration: Release
  #         arguments: "-o $(Build.ArtifactStagingDirectory)/Published"
  #     - task: PublishBuildArtifacts@1
  #       displayName: Make artifacts available
  #       inputs:
  #         PathtoPublish: $(Build.ArtifactStagingDirectory)/Published/Nop.Web.zip
  #         ArtifactName: 'nop'
  #         publishLocation: Container
  - job: dockerbuild
    displayName: docker image build
    pool:
      name: "Azure Pipelines"
      vmImage: "ubuntu-22.04"
    steps:
      - task: Docker@2
        inputs:
          containerRegistry: "${{ parameters.containerRegistry }}"
          repository: shaikkhajaibrahim/nopfromado
          command: 'buildAndPush'
          Dockerfile: "$(dockerfilelocation)"
          tags: "$(Build.BuildId)"


Multi Stage pipeline

  • The basic pipeline
    Preview
  • Manual steps
# Remove all contianer
docker container rm -f $(docker container ls -a -q)
# remove all images
docker image rm -f $(docker image ls -q)
docker container run -d --name nop -P shaikkhajaibrahim/nopfromado
  • YAML Used
---
trigger:
  - master

parameters:
  - name: containerRegistry
    displayName: Service Connection For Docker Image
    default: 'mydockerhub'
  - name: vmImage
    displayName: Microsoft Hosted Agent Name
    default: 'ubuntu-22.04'
    values:
      - windows-2022
      - windows-2019
      - ubuntu-22.04
      - ubuntu-20.04

variables:
  dockerfilelocation: '**/Dockerfile'

stages:
  - stage: buildstage
    displayName: Build the application
    jobs:
      - job: dockerbuild
        displayName: docker image build
        pool:
          name: "Azure Pipelines"
          vmImage: "${{ parameters.vmImage }}"
        steps:
          - task: Docker@2
            inputs:
              containerRegistry: "${{ parameters.containerRegistry }}"
              repository: shaikkhajaibrahim/nopfromado
              command: 'buildAndPush'
              Dockerfile: "$(dockerfilelocation)"
              tags: "$(Build.BuildId)"
  - stage: deployStage
    displayName: Deploy application
    jobs:
      - job: deployContainer
        displayName: Run the nop commerce
        pool: default
        steps:
          - bash: "docker container rm -f $(docker container ls -a -q)"
            displayName: Remove All running containers
          - bash: "docker image rm -f $(docker image ls -q)"
            displayName: Remove all images
          - bash: "docker container run -d --name nop -P shaikkhajaibrahim/nopfromado:$(Build.BuildId)"
            displayName: Run the application


Preview

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

About continuous learner

devops & cloud enthusiastic learner