本文是基于Jenkins部署在Windows Server,通过把项目推送到远程服务器,使用远程服务器上的docker构建镜像并运行

本文涉及docker的相关命令和使用
均为alpha0808大佬的指导

在Jenkins上全局配置maven、jdk、git,用于部署java项目。
打开Manage Jenkins,点击Global Tool Configuration

设置服务器中maven的setting.xml的路径

点击安装jdk

将Install automatically(自动安装)勾选去掉,填写服务器上jdk的安装目录

将Install automatically(自动安装)勾选去掉,填写git下bin目录+git

点击maven安装

将Install automatically(自动安装)勾选去掉,填写服务器上maven的目录

设置完,点击应用
windows上部署的Jenkins无法自动找打可以执行sh,所以需要配置。

在Manage Jenkins→Configure System→Shell设置sh作为脚本程序(我这里使用git的sh作为执行脚本程序)
点击”新建Item“

输入条目名称,选择"Freestyle project",点击确定

创建成功

点击条目,选择"配置"

勾选"Discard old builds",设置构建的保持时间和个数,通过删除旧的构建来释放磁盘空间,如果不设置,默认365天删除一次

构建项目需要通过参数动态构建时使用。
勾选"This project is parameterized",点击"添加参数",选择对应的参数类型

示例:
通过参数version,设置项目的版本,构建jar至nexus使用
选择String Parameter,设置版本参数version

在实际开发中,我们可以通过svn、git来进行源码管理,因为Jenkins默认只进行了git的源码代理。
在准备工作安装了Multiple SCMs插件,这样就能更自由的选择源码管理方式。这里只说通过Jenkins自带的git源码管理。
设置源码地址:

使用ssh的git地址,需要创建对应的凭证,点击"Credential"下的"添加"

设置凭据类型:SSH Username with private key

设置用户名和对应的ssh凭据(git私钥)

设置分支

在构建页签下,新增构建步骤"invoke top-level Maven targets"

在"构建后操作"页签,点击"增加构建后操作步骤",选择"Send build artifacts over SSH"

添加对应远程服务器的ip地址

填写文件路径,忽视前缀,以及远程服务器的存放文件路径(我这里是默认把整个文件发布到远程服务器)

发布后命令,示例如下:
#!/bin/bash
cd jenkinsTest/target
ls -l
mv jenkinsTest.jar ../
cd ../
rm -rf src target *.iml *.xml *.md
docker build -t 127.0.0.1/ms/jenkinsTest:1.0.0 .
docker push 127.0.0.1/ms/jenkinsTest:1.0.0
if docker ps -a |awk '{print $NF}'|grep '^jenkinsTest'; then
docker rm -f jenkinsTest
fi
docker run -d -p 9901:9901 -e JAVA_OPTS="-Xrs -Xms1g -Xmx2g -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m" --env-file=/opt/env.list -v /data:/data -v /ibase/logs:/ibase/logs --net=host --name jenkinsTest 127.0.0.1/ms/jenkinsTest:1.0.0
if docker images | grep "" ; then
docker rmi -f $(docker images | grep "" | awk "{print \$3}")
fi
命令解释如下:
默认打包后的jar包是在target目录下,而dockerfile跟target是同一级目录,将jar提到上级目录,同时删除其他冗余文件
#!/bin/bash cd jenkinsTest/target ls -l mv jenkinsTest.jar ../ cd ../ rm -rf src target *.iml *.xml *.md
- 1
- 2
- 3
- 4
- 5
- 6
构建镜像,同时将镜像推向仓库
docker build -t 127.0.0.1/ms/jenkinsTest:1.0.0 . docker push 127.0.0.1/ms/jenkinsTest:1.0.0
- 1
- 2
镜像启动前,删除对应的进程,将镜像放入容器启动,然后删除所有none镜像或停止的容器
if docker ps -a |awk '{print $NF}'|grep '^jenkinsTest'; then docker rm -f jenkinsTest fi docker run -d -p 9901:9901 -e JAVA_OPTS="-Xrs -Xms1g -Xmx2g -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m" --env-file=/opt/env.list -v /data:/data -v /ibase/logs:/ibase/logs --net=host --name jenkinsTest 127.0.0.1/ms/jenkinsTest:1.0.0 if docker images | grep "" ; then docker rmi -f $(docker images | grep "" | awk "{print \$3}") fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
配置保存完毕,返回条目,点击"build now"搞定
