docker 中运行的 jenkins 使用 maven 构建 java 应用
配置要求
- 最小 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
- 进入首页,点击 New Item
- 在项目名的地方,我们填写
simple-java-maven-app
- 类型我们选择 pipeline
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。
我们运行一下,看下输出结果如何。
并且查看一下 workspace,看下载下来的代码
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‘ } } } }
然后提交,查看一下运行结果如何:
然后再查看一下 wordspace
里面构建的文件,我们看到多了一个target
目录,我们看看里面有什么新增的文件。
这个 jar 包就是我们最终需要的文件。
2.5、发布到服务器上面
这里我们还是选择插件 Publish over SSH,配置这个插件,我简要说一下。
这里的 Remote Directory 比较重要,后面所有的文件都会传到以这个目录为根目录的目录下面。
这里配置好了,但是我们要写 pipeline,这里我们只能借住流水线语法生成器,我们这里计划把 target 里面的 jar 包放到目标服务器的 /tmp/ 目录下面。
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)]) } } } }
运行,我们查看一下结果是否如我们预期。
我们这里只是把 jar 传送到了对应的服务器,以及对应的目录,要想发布,我们可以直接再添加几条启动的命令即可,我这里不再进行展示。