一、安装插件
docker
用于使用 Docker 容器进行构建步骤
docker-pipeline
用于使用项目根目录下的 Dockerfile
构建镜像,并上传到镜像仓库
用于在 Docker 镜像内部实现构建步骤,而不是在 Jenkins 节点本地。
例如像下面这样
docker.image('maven:3.3.3-jdk-8').inside {
git '…your-sources…'
sh 'mvn -B clean install'
}
上面是一个完整的管道脚本。 inside将要:
1 自动获取代理和工作区(不需要额外的node块)。
2 将请求的映像拉到Docker服务器(如果本地仓库没有此镜像)。
3 启动运行该映像的容器。
4 使用相同的文件路径将Jenkins工作空间作为“卷”安装在容器内。
5 运行您的构建步骤。像这样的外部进程sh将被包装,docker exec因此它们将在容器内运行。其他步骤(例如测试报告)未经修改即可运行:它们仍然可以访问由构建步骤创建的工作空间文件。
6 在构建完成后,停止容器并丢弃其消耗的所有存储。
7 记录该构建使用了指定图像的事实。这将解锁其他Jenkins插件中的功能:您可以使用映像跟踪所有项目,或者将更新的映像推送到Docker注册表时将该项目配置为自动触发。如果您使用Docker Traceability插件,您还可以查看Docker服务器上映像部署的历史记录。
二、创建凭据
这里是直接安装生产环境来作为背景做练习,企业中往往会使用私用镜像仓库 Harbor。
在这里需要创建连接到 Harbor 仓库的凭据,就是用户名和密码。
配置 docker
需要在使用 docker 的服务器上设置如下内容
[root@bj-gitlab ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
"insecure-registries": ["https://192.168.80.201"]
}
registry-mirrors 镜像加速器
insecure-registries Harbor 仓库
之后重启 docker
三、编写 Pipeline
pipeline {
// 设置全局环境变量
environment {
url = 'ssh://git@gitlab.shark.com:/root/simple-java-maven-docker-app.git'
}
// 全局代理是 none,表示全局上不设置任何代理,需要在每个步骤中设置代理
agent none
stages {
// 拉取代码并构建
stage('pull code and build') {
// 此阶段的代理: docker 容器
agent {
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
// 自定义的工作空间
customWorkspace "/opt/"
}
}
steps {
// 拉取代码
git(url: env.url, branch: 'master', credentialsId: 'gitlab')
// 构建
sh 'mvn -B clean package'
}
}
// 构建镜像
stage("build image"){
agent {
node {
label 'master'
customWorkspace "/opt/"
}
}
steps {
script {
docker.withRegistry('http://myharbor.shark.com:80', 'harbor') {
docker.build('app-java/myapp').push('latest')
}
}
}
}
}
}
使用凭据
和 Gialab 深度集成