本文是基于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
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
命令解释如下:
切换dockerfile所在目录
#!/bin/bash cd jenkinsTest
构建镜像,同时将镜像推向仓库
docker build -t 127.0.0.1/ms/jenkinsTest:1.0.0 . docker push 127.0.0.1/ms/jenkinsTest:1.0.0
镜像启动前,删除对应的进程,将镜像放入容器启动,然后删除所有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