Jenkins SpringBoot Docker Swarm流水线部署

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主机上面
  • 第一步新建流水线任务


    image.png
  • 第二步配置流水线
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'
    }
 }


你可能感兴趣的:(Jenkins SpringBoot Docker Swarm流水线部署)