We will learn how to automate Docker builds using Jenkins Pipeline. We will use PHP based application. I have already created a repo with source code + Dockerfile. We will see how to create Docker image and upload docker image into Nexus Docker registry successfully.
- Automating builds
- Automating Docker image builds
- Automating Docker image upload into Nexus docker registry
- Automating Docker image builds
- Automating Docker image upload into Nexus docker registry
- Automating Docker container provisioning
Watch here for YouTube channel:
Pre-requisites:
1. Jenkins is up and running
2. Docker installed on Jenkins instance. Click here to for integrating Docker and Jenkins
3. Docker and Docker pipelines plug-in are installed
4. Nexus is up and running and docker registry is configured. Click here to know how to do that.
5. port 80 is opened up in firewall rules to access phpApp running inside Docker container
1. Jenkins is up and running
2. Docker installed on Jenkins instance. Click here to for integrating Docker and Jenkins
3. Docker and Docker pipelines plug-in are installed
4. Nexus is up and running and docker registry is configured. Click here to know how to do that.
5. port 80 is opened up in firewall rules to access phpApp running inside Docker container
Create an entry in Manage Credentials for connecting to Nexus
Go to Jenkins --> Manage Jenkins--> Click on Manage Credentials.
Enter Nexus user name and password with ID as nexus
Click on Save.Step # 2 - Copy the pipeline code from below
Make sure you change red highlighted values below:
Your account_d should be updated and repo should be updated.
pipeline {
agent any
environment {
imageName = "myphpapp"
registryCredentials = "nexus"
registry = "ec2-13-58-223-172.us-east-2.compute.amazonaws.com:8085"
dockerImage = ''
}
stages {
stage('Code checkout') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '', url: 'https://bitbucket.org/ananthkannan/phprepo/']]]) }
}
// Building Docker images
stage('Building image') {
steps{
script {
dockerImage = docker.build imageName
}
}
}
// Uploading Docker images into Nexus Registry
stage('Uploading to Nexus') {
steps{
script {
docker.withRegistry( 'http://'+registry, registryCredentials ) {
dockerImage.push('latest')
}
}
}
}
// Stopping Docker containers for cleaner Docker run
stage('stop previous containers') {
steps {
sh 'docker ps -f name=myphpcontainer -q | xargs --no-run-if-empty docker container stop'
sh 'docker container ls -a -fname=myphpcontainer -q | xargs -r docker container rm'
}
}
stage('Docker Run') {
steps{
script {
sh 'docker run -d -p 80:80 --rm --name myphpcontainer ' + registry + imageName
}
}
}
}
}
Step # 3 - Click on Build - Build the pipeline
Once you create the pipeline, click on Build now.
Steps # 4 - Check Docker images are uploaded into Nexus Registry
Login to Nexus, click on your repo, now you should see the image got uploaded.
Steps # 5 - Access PHP App in the browser which is running inside docker container
Once build is successful, go to browser and enter http://public_dns_name
You should see page like below:
Hi, I tired following your steps in the same order but In the last step i.e. "Upload into Nexus" it is throwing an error saying "$ docker login -u admin -p ******** http://nexus.adda247.com:4043/
ReplyDeleteWARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://nexus.adda247.com:4043/v2/": http: server gave HTTP response to HTTPS client".
Kindly help!!
Try this
Deletehttps://docs.docker.com/registry/insecure/