Đầu tiền bạn cần cài đặt plugin sau:
1) Prepare
1.1) install Plugin Docker pipeline
1.2) approve
Sau đó khi run build nó sẽ cần bạn approve 1 số thứ
1.3) Needing vm jenkins that have docker
Sau đó cấu hình kết nối giữa jenkins master và agent.
2) Docker Images
GIờ hình ta đã có hết mọi thứ, mình sẽ cung cấp cho bạn file script
node('jenkins-vm'){
stage('build'){
def mavenImage = docker.image("maven:latest")
mavenImage.inside{
sh "mvn -v"
}
}
}
3)Docker Args
Bài này chúng ta thêm env trong lúc run container.
node('jenkins-vm'){
stage('build'){
def mavenImage = docker.image("maven:latest")
mavenImage.inside('-e myEnv=nimtechnology', {
sh 'echo $myEnv'
})
}
}
Còn nếu bạn nghe lời mình sẽ ko lỗi
4) Docker AlwaysPull
Chúng ta có pipeline script, Lúc nào jenkins của pull image
node('jenkins-vm'){
stage('build'){
def mavenImage = docker.image("maven:latest")
mavenImage.pull()
mavenImage.inside('-e myEnv=nimtechnology', {
sh 'echo $myEnv'
})
}
}
5) Docker Custom Workspace
node('jenkins-vm'){
stage('build'){
ws('/var/lib/jenkins/workspace/nodeDockerCustomWorkspace'){
def mavenImage = docker.image("maven:latest")
mavenImage.inside('-e myEnv=nimtechnology', {
sh 'echo $myEnv'
})
}
}
}
6) RegistryUrl CredentialsId
node('jenkins-vm'){
stage('build'){
def mavenImage = docker.withRegistry('https://docker.nimtechnology.com'){
docker.image('docker.nimtechnology.com/dockerhub/kennethreitz/httpbin').inside{
sh 'printenv'
}
}
}
}
7) Dockerfile
node('jenkins-vm'){
stage('build'){
checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
userRemoteConfigs: [[
url: 'https://github.com/mrnim94/pipeline-agent-dockerfile.git'
]]
])
def myCustomUbuntuImage = docker.build("my-ubuntu:my-latest")
myCustomUbuntuImage.inside{
sh 'cat /etc/lsb-release'
}
}
}
8) Dockerfile Directory
node('jenkins-vm'){
stage('build'){
checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
userRemoteConfigs: [[
url: 'https://github.com/mrnim94/pipeline-agent-dockerfile-dir.git'
]]
])
def myCustomUbuntuImage = docker.build("my-ubuntu:my-latest", "./dockerfileDir")
myCustomUbuntuImage.inside{
sh 'cat /etc/lsb-release'
}
}
}
9) Dockerfile Filename
node('jenkins-vm'){
stage('build'){
checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
userRemoteConfigs: [[
url: 'https://github.com/mrnim94/pipeline-agent-dockerfile-filename.git'
]]
])
def myCustomUbuntuImage = docker.build("my-ubuntu:my-latest", "--file myCustomNameDockerfile .")
myCustomUbuntuImage.inside{
sh 'cat /etc/lsb-release'
}
}
}
10) Dockerfile AdditionalBuildArgs
node('jenkins-vm'){
stage('build'){
checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
userRemoteConfigs: [[
url: 'https://github.com/mrnim94/pipeline-agent-dockerfile.git'
]]
])
def myCustomUbuntuImage = docker.build("my-ubuntu:my-latest", "--tag my-dockerfile:example .")
myCustomUbuntuImage.inside{
sh 'cat /etc/lsb-release'
}
}
}
11) Dockerfile Custom Workspace
node('jenkins-vm'){
stage('build'){
ws('/var/lib/jenkins/workspace/nodeDockerCustomWorkspace'){
checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
userRemoteConfigs: [[
url: 'https://github.com/mrnim94/pipeline-agent-dockerfile.git'
]]
])
def myCustomUbuntuImage = docker.build("my-ubuntu:my-latest", "--tag my-dockerfile:example .")
myCustomUbuntuImage.inside{
sh 'cat /etc/lsb-release'
}
}
}
}