docker 中运行的 jenkins 使用 maven 构建 java 应用

一、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 使用 maven 构建 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 使用 maven 构建 java 应用

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

docker 中运行的 jenkins 使用 maven 构建 java 应用

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 使用 maven 构建 java 应用

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

docker 中运行的 jenkins 使用 maven 构建 java 应用

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

docker 中运行的 jenkins 使用 maven 构建 java 应用

2.5、发布到服务器上面

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

docker 中运行的 jenkins 使用 maven 构建 java 应用

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

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

docker 中运行的 jenkins 使用 maven 构建 java 应用

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 使用 maven 构建 java 应用

docker 中运行的 jenkins 使用 maven 构建 java 应用

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

欢迎大家扫码关注,获取更多信息

docker 中运行的 jenkins 使用 maven 构建 java 应用

相关推荐