准备一个简单的 Spring Boot 项目

是不是 Spring Boot 项目无所谓,只要是使用 Maven 的项目都可以完全按照来,其它项目除了编译都几乎一样
https://github.com/belier-cn/spring-boot-docker.git

Jenkins 安装

使用 Docker Compose 运行 Jenkins
不用安装默认推荐插件,太多了,没有必要
Jenkins 汉化和加速插件下载

Jenkins 安装所需插件

  1. Pipeline
    Pipeline 介绍
  2. Blue Ocean
    Blue Ocean 介绍
  3. Git Plugin
    Git Plugin Github 地址
  4. SSH Pipeline Steps
    SSH Pipeline Steps Github 地址

创建 Pipeline 项目

Pipline 入门

编写 Pipeline 脚本

Jenkinsfile 使用

pipeline {
    agent none
    // 定义环境变量
    environment {
        // 根据 id 获取配置在 Jenkins 中的凭证 参考文档:https://jenkins.io/zh/doc/book/pipeline/jenkinsfile/#%E5%A4%84%E7%90%86%E5%87%AD%E6%8D%AE
        DOCKER_REGISTRY = credentials('aliyun-docker-registry')
        REGISTRY_URL = 'registry.cn-shanghai.aliyuncs.com'
        IMAGE_NAME = 'registry.cn-shanghai.aliyuncs.com/belier/test'
        CONTAINER_NAME = 'test'
        REMOTE_HOST = '192.168.56.11'
        GIT_URL = 'https://github.com/belier-cn/spring-boot-docker.git'
    }
    stages {
        stage('Checkout') {
            agent any
            steps {
                // 拉取代码,参考文档:https://jenkins.io/doc/pipeline/steps/workflow-scm-step/
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[url: GIT_URL]]])
            }
        }
        stage('Build Jar') {
            agent {
                // 参考文档:https://jenkins.io/zh/doc/book/pipeline/docker/
                docker {
                    image 'maven:3-alpine'
                    // 挂载目录,如果要配置 maven 的阿里云仓库地址,在 /usr/local/src/maven 下放一个配置好的 settings.xml 文件即可
                    args '-v /usr/local/src/maven:/root/.m2'
                }
            }
            steps {
                // 打包
                sh 'mvn clean -Dmaven.test.skip=true package'
            }
        }
        stage('Build Image') {
            agent any
            steps {
                // 构建镜像
                sh "docker build -t ${IMAGE_NAME} ."
            }
        }
        stage('Push Image') {
            agent any
            steps {
                // 登陆到阿里云镜像仓库
                sh "docker login -u=${DOCKER_REGISTRY_USR} -p=${DOCKER_REGISTRY_PSW} ${REGISTRY_URL}"
                // 推送镜像到阿里云镜像仓库
                sh "docker push ${IMAGE_NAME}"
            }
        }
        stage('Deploy') {
            agent any
            steps {
                script {
                    // 登陆远程服务器,拉取镜像并运行,参考文档:https://github.com/jenkinsci/ssh-steps-plugin#withcredentials
                    def remote = [:]
                    remote.name = "centos7-11"
                    remote.host = REMOTE_HOST
                    remote.allowAnyHosts = true
                    withCredentials([sshUserPrivateKey(credentialsId: REMOTE_HOST, keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'userName')]) {
                        remote.user = userName
                        remote.identityFile = identity
                        // 登陆到阿里云镜像仓库
                        sshCommand remote: remote, command: "docker login -u=${DOCKER_REGISTRY_USR} -p=${DOCKER_REGISTRY_PSW} ${REGISTRY_URL}"
                        try {
                            // 删除已经存在的容器
                            sshCommand remote: remote, command: "docker rm -f ${CONTAINER_NAME}"
                        } catch (e) {
                            echo '容器不存在'
                        }
                        // 运行容器
                        sshCommand remote: remote, command: "docker run --name ${CONTAINER_NAME} -p 8080:8080 -d ${IMAGE_NAME}"
                    }
                }
            }
        }
    }
}

集成 Sonarqube

参考:Maven 项目 Jenkins Pipeline 使用 SonarQube

写的不好,仅供参考