Jenkins pipeline + docker + maven 打包SpringBoot项目

一、安装 Jenkins

    使用 Docker 方式安装 jenkins,命令如下:

docker run -u root --name my-jenkins -d -p 8184:8080 -p 50000:50000 -v /home/jenkins_home:/var/jenkins_home -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v ~/.ssh:/root/.ssh  -t jenkins/jenkins

    -p 映射jenkins的端口: 宿主机端口:容器端口

         Jenkins 访问的端口号是8080 映射成8184,可自定义成其他端口,访问的话访问的是映射的端口。另外还需要暴露一个tcp的端口号50000。

    -v 映射的是存储路径: 宿主机路径:容器路径

        其中我映射了四个路径,

            第一个 映射的事jenkins的本地映射路径

            第二个和第三个是 Docker的操作路径,因为之后 jenkins pipeline 里面需要用到 docker 命令,所以我把宿主机里面的docker映射到了容器中

            第四个是 github 的 SSH Key 路径,因为 jenkins 在 github 中拉取代码这里需要用到 SSH证书,因此我把宿主机的 SSH Key 映射进了容器里使用

    -t 这个就是jenkins的image

二、创建 pipline

    Jenkins初始化的步骤 不详细介绍,直接从创建 pipeline 开始。

    1、Jenkinsfile

        Jenkinsfile:

import java.text.SimpleDateFormat

def dateFormat = new SimpleDateFormat("yyyyMMddHHmm")
// 
def DOCKER_TAG = dateFormat.format(new Date())


pipeline {
    agent any

    environment {
        DOCKER_URL='换成自己Docker的地址'
        DOCKER_NAMESPACE='换成自己Docker的NameSpace'
        DOCKER_NAME='换成自己的Docker Name'
        ENV='test'
    }

    stages {
        stage('git pull'){
            steps {
                sh 'pwd'
                git credentialsId: ' 这里是github的证书,在Jenkins系统设置后的凭据中配置,生成的一串码 ', url: ' github地址 '
            }
        }
        stage('mvn install') {
            steps {
                script {
                    try {
                        sh 'pwd'
                        docker.image('maven:3.6.0-jdk-8-alpine').inside('-v /volume1/docker/.m2:/root/.m2') {
                            sh 'mvn --version'
                            sh 'mvn clean install'
                        }
                        currentBuild.result="SUCCESS"
                    } catch (e) {
                        currentBuild.result="FAILURE"
                        throw e
                    } finally {
                    }
                }
            }
        }
        stage('docker run') {
            steps {
                script {
                    sh 'pwd'
                    def imageUrl = "${DOCKER_URL}/${DOCKER_NAMESPACE}/${DOCKER_NAME}:${DOCKER_TAG}"
                    def customImage = docker.build(imageUrl)
                    sh "docker rm -f ${DOCKER_NAME} | true"
                    customImage.run("-it -d --name ${DOCKER_NAME} -p 8189:8001 -e SPRING_PROFILES_ACTIVE=${env}")
                    //only retain last 3 images,自动删除老的容器,只保留最近3个
                    sh """docker rmi $(docker images | grep ${DOCKER_NAME} | sed -n  '4,$p' | awk '{print $3}') || true"""
                }
            }
        }
    }
}

                Jenkins pipeline + docker + maven 打包SpringBoot项目

       pipeline 里面的 credentialsId 是需要配置的,在 Jenkins -> 凭据 -> 系统 ->全局凭据 (unrestricted) 目录下 添加凭据 

                   Jenkins pipeline + docker + maven 打包SpringBoot项目

       点击 确定 之后

                   Jenkins pipeline + docker + maven 打包SpringBoot项目

       还有一个前提就是Dockerfile,要放在SpringBoot项目的根路径下,这样jenkins在maven打包之后可以执行 Dockerfile文件来进行build image。

       把这个添加到 pipeline里面就可以。 其他我应该都没配置,点击构建就可以手动的跑起来了。这篇文章的主要目的就是分享一下 Pipelinefile 的内容,如果有什么细节我缺少了,请多多指教。

    2、github 自动触发

       构建成功的话,下面可以配置一下个 github 的自动触发功能。

       (1) github 配置

           github  Setting -> Developer settings -> personal access tockers

            Jenkins pipeline + docker + maven 打包SpringBoot项目

        

       (2) 回到 jenkins 项目里面

            我们需要选择 Generic Webhook Trigger 并在下面填写一下 tocken 这个 tocker 可自定义,然后下面会给出一些提示的 url。

            Jenkins pipeline + docker + maven 打包SpringBoot项目

            保存配置之后,我们按照它提示的url,在 github 的项目 setting 里面 配置 Webhooks . 如图

            这是提示的内容

            Jenkins pipeline + docker + maven 打包SpringBoot项目

            这是 github 的 Webhooks

            Jenkins pipeline + docker + maven 打包SpringBoot项目

      (3) 这样就成功了 

           Jenkins pipeline + docker + maven 打包SpringBoot项目