一、jenkins 的安装

配置要求

  • 最小 256MB 内存,推荐 512MB 以上
  • 10GB硬盘空间,用于安装 Jenkins、Docker 镜像和容器

在 Docker 中运行 Jenkins

我们在服务器上面为 jenkins 准备数据目录,假设为/home/data/www/jenkins.wzlinux.com,前提是我们已经在服务器上面安装好了 docker。

docker run \
  --name jenkins \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -e TZ="Asia/Shanghai" \
  -v /home/data/www/jenkins.wzlinux.com:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart=on-failure:10 \
  jenkinsci/blueocean

配置 jenkins

使用浏览器打开服务器的 8080 端口,并等待 Unlock Jenkins 页面出现。

可以使用如下命令获取管理员的密码:

docker logs jenkins

关于插件的安装我这里也不介绍了

二、配置 pipeline

2.1、配置源

我们从 github 上面找一个 java 的案例作为我们的代码源,当然你也可以选择自己的 gitlab。

https://github.com/jenkins-docs/simple-java-maven-app

2.2、创建我们的 pipeline

  1. 进入首页,点击 New Item
  2. 在项目名的地方,我们填写simple-java-maven-app
  3. 类型我们选择 pipeline

docker 安装jenkins 重启消失 docker jenkins jdk_java

2.3、拉取源代码

点击确定之后,我们进入到 project 的配置界面,我们找到 pipeline 这一部分。

我们可以把 pipeline 写入到 jenkinsfile,然后保存到代码根目录,也可以直接在这里填写,我们选择在这里填写。

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
    }
}
  • 因为我们是构建 java 项目,所以我们这里选择 maven 的镜像,大家可以选择自己的版本,使用 docker 的好处就是,一些工具我们也不需要再去安装,然后到系统工具配置了,直接选择自己需要的工具的 docker 镜像就可以了。
  • 我们这里去拉取 github 的代码,如果语法不会的话,输入框下面有流水线语法器,可以随时去生成,也可以使用我们的 gitlab。

我们运行一下,看下输出结果如何。

docker 安装jenkins 重启消失 docker jenkins jdk_docker_02

并且查看一下 workspace,看下载下来的代码

docker 安装jenkins 重启消失 docker jenkins jdk_maven_03

2.4、maven 构建

那我们再完善一下 pipeline,我们增加打包构建 stage。

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

然后提交,查看一下运行结果如何:

docker 安装jenkins 重启消失 docker jenkins jdk_maven_04

然后再查看一下 wordspace 里面构建的文件,我们看到多了一个target目录,我们看看里面有什么新增的文件。

docker 安装jenkins 重启消失 docker jenkins jdk_docker_05

这个 jar 包就是我们最终需要的文件。

docker 安装jenkins 重启消失 docker jenkins jdk_maven_06

2.5、发布到服务器上面

这里我们还是选择插件 Publish over SSH,配置这个插件,我简要说一下。

docker 安装jenkins 重启消失 docker jenkins jdk_docker_07

这里的 Remote Directory 比较重要,后面所有的文件都会传到以这个目录为根目录的目录下面。

这里配置好了,但是我们要写 pipeline,这里我们只能借住流水线语法生成器,我们这里计划把 target 里面的 jar 包放到目标服务器的 /tmp/ 目录下面。

docker 安装jenkins 重启消失 docker jenkins jdk_maven_08

Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔),为了简要我们写target/*.jar`。
Remove prefix:移除前缀(只能指定Source files中的目录),这里我们移除 target。
Remote directory:远程目录(这里也是相对目录,目录根据我们配 ssh的时候填写的Remote Directory 路径,我写的是/root,所以文件会被上传到我们的 /root/java-maven 目录下面。

最终的 pipeline 如下:

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
        stage('Deliver') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '应用服务器4', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cp /root/java-maven/*.jar /tmp;
ls /tmp/*.jar''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/java-maven', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }        
    }
}

运行,我们查看一下结果是否如我们预期。

docker 安装jenkins 重启消失 docker jenkins jdk_java_09

docker 安装jenkins 重启消失 docker jenkins jdk_docker_10

我们这里只是把 jar 传送到了对应的服务器,以及对应的目录,要想发布,我们可以直接再添加几条启动的命令即可,我这里不再进行展示。