Azure DevOps Service Connections
- Lets create a service connection to docker hub
- Navigate to Project Settings => Service Connections
- 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
using variables and parameters in Azure DevOps Pipelines
- Refer Here for parameters and Refer Here for parameter yaml schema
- Paramter types: Refer Here
- We have added a parameter for container registry
---
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)"
* 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)"
- To use variables we have 3 syntaxes Refer Here
Multi Stage pipeline
- The basic pipeline
- 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