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

Published
Categorized as Uncategorized Tagged

By continuous learner

devops & cloud enthusiastic learner

Leave a Reply

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

Please turn AdBlock off
Animated Social Media Icons by Acurax Responsive Web Designing Company

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube