1、Jenkins流水线快速部署spring boot项目至docker容器
- 环境要求
1、gitLab
docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 8000:80 --publish 222:22 \
--name gitlab \
--restart always \
--rm=false \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
更改/srv/gitlab/config/gitlab.rb
l_url 'http://127.0.0.1' //这里不需要加端口号
gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 222
2、docker 仓库
docker run -d --name nexus3 --restart=always \
-p 8081:8081 \
-p 8082:8082 \
-v nexus-volume:/nexus-data \
--restart=always \
sonatype/nexus3
8081是nexus 服务端口
8082是docker私服端口
3、swarm 集群
参考docker官方文档
4、jenkins
docker run \
-u root \
--rm=false \
--restart='always' \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
5、portainer
docker run -d -p 9000:9000 --name portainer --rm=false --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
以上环境都以docker方式部署;jenkins和portainer必须部署在swarm主机上面
-
第一步新建流水线任务
- 第二步配置流水线
node {
stage('Build') {
// groovy git插件下载代码
checkout([$class: 'GitSCM', branches: [[name: "master"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git认证信息', url: 'git地址']]])''
// 自动创建maven容器构建代码 添加--volume maven-repo该映射每次发布就不要重新下载依赖包
docker.image('maven:3-alpine').inside('--volume maven-repo:/root/.m2') {
sh 'mvn -B -DskipTests -s settings.xml clean package docker:build -DdockerImageTags=latest.${BUILD_ID}'
}
//构建docker镜像并推送至仓库
sh 'docker login -u xx -p xx ip:port' //登陆docker仓库
def customImage = docker.image('dockerImage:latest.${BUILD_ID}')
docker.withRegistry('docker仓库 http://ip:端口') {
customImage.push()
}
//更新docker service 配置好后执行发布报错后镜像文件已经上传仓库;然后在portainer 手动创建docker-service-name;portainer要配置本地仓库
sh 'docker service update --image ip:端口/dockerImage:latest.${BUILD_ID} --update-failure-action continue --with-registry-auth docker-service-name'
}
}