原文地址 http://teemor.xyz/article?id=80
1. 配置jenkins环境
安装插件
系统管理 =》系统设置
Publish over SSH
注意:Remote Directory是复制过去后存放文件路径的起始地址,后面在项目里配置时的路径为基于该路径的相对地址
配置gitee
点击添加按钮添加gitee令牌
根据提示网址获取gitee令牌
设置完之后点击页面下方的保存按钮
系统管理 =》全局工具设置
1.1. 配置maven setting路径
1.2. 配置jdk路径
1.3. 配置git路径
1.4. 配置maven安装路径
1.5.
2. 新建项目
这里选择构建一个自由风格的项目,然后点击确定
选择gitee链接
之前配置的
配置源码仓库
1、git:
设置仓库地址,并且点击添加,添加gitee帐号,设置一次之后,后面就可以直接从下拉框选择已设置的帐号,同时设置项目所选分支如master分支
添加凭据时选择用户名后密码类型的凭据就可以
2、svn方式:当一个git仓库下同时存在多个项目时,使用git方式每次都会把整个仓库拉下来,这时就可以通过svn插件拉取需要拉取的项目。(gitee可以使用svn拉取仓库)
配置项目路径时,使用仓库地址加上项目的相对路径
设置构建命令
maven版本为之前配置的
设置构建脚本
点击增加构建步骤,选择执行shell
编辑shell脚本
附上自用shell脚本
#!/bin/sh
WORKSPACE='/var/lib/jenkins/workspace/test' #当前项目的工作空间路径,即jenkins构建后的项目根路径
PROJECT='/target' #编译文件所在路径
TARGET='/home/teemor/docker_home/test' #项目部署路径,也就是Dockerfile所在路径
NAME='test' #项目名
PORT='8770' #项目暴露的端口
CONTAINER_ID=`sudo docker ps -a | grep $REPOSITORIES | awk '{print $1}'`
echo 容器ID $CONTAINER_ID
cd $WORKSPACE$PROJECT
echo 当前路径
pwd
echo 复制文件开始
sudo cp ./$NAME.jar $TARGET
echo 复制文件结束
cd $TARGET
echo 当前路径
pwd
if [ -n "$CONTAINER_ID" ]; then
echo 停止docker容器
sudo docker stop $NAME
echo 删除docker容器
sudo docker rm $NAME
fi
echo 构建docker镜像
sudo docker build -t $NAME:0.0.1 ./
echo 启动docker容器
sudo docker run -d --name $NAME-p $PORT:$PORT $NAME:0.0.1
提示:脚本执行可能会失败,因为jenkins是使用jenkins用户执行脚本的,没有sudo权限,需要配置
先以root用户的身份登录,然后执行vi sudo , 或者其他具有sudo 权限的用户执行 sudo visudo也是一样的
在打开的文件中找到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在这一行下面添加用户名,然后保存退出,之后用户就具有使用sudo命令的权限了。
修改后如下所示
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
jenkins ALL=(ALL) ALL
如果要让用户在使用sudo的时候不再需要输入密码,还需要修改刚才的文件visduo
jenkins ALL=(ALL) NOPASSWD:ALL
如果是需要打包后部署到其它服务器则按以下方式
部署到远程主机则构建过程只需要配置maven打包,无需设置shell命令。
构建后操作:点击增加构建后操作步骤,选择 send build artifacts over ssh。前面安装插件时提到过需要安装publish over ssh插件
Remote Directory 为相对地址,基于之前设置中配置的路径
bash /home/teemor/docker_home/deploy.sh -p 7020 -n test
-j /home/teemor/docker_home/test
部署脚本,和之前直接编辑在构建脚本的类似,构建脚本也可以改为直接调用shell脚本,这样配置jenkins时更方便
#!/bin/sh
while getopts :p:n:j: opt; do
case $opt in
p) PORT=${OPTARG}
;;
n) CONTAINER_NAME=${OPTARG}
;;
j) JAR_PATH=${OPTARG}
;;
esac
done
echo config:
echo PORT: $PORT
echo CONTAINER_NAME: $CONTAINER_NAME
echo JAR_PATH: $JAR_PATH
CONTAINER_ID=`sudo docker ps -a | grep $CONTAINER_NAME | awk '{print $1}'`
echo 容器ID $CONTAINER_ID
if [ -n "$CONTAINER_ID" ]; then
echo 停止docker容器...
sudo docker stop $CONTAINER_NAME
echo 删除docker容器...
sudo docker rm $CONTAINER_NAME
fi
echo 构建docker镜像
sudo docker build -t $CONTAINER_NAME:0.0.1 $JAR_PATH
echo 启动docker容器...
sudo docker run -d --name $CONTAINER_NAME -p $PORT:$PORT $CONTAINER_NAME:0.0.1
最后附上Dockerfile
在部署ar包的目录(/home/teemor/docker_home/test)下创建Dockerfile文件,名字就是Dockerfile,Dockerfile内脚本如下
From java:8
ADD test.jar /app.jar
EXPOSE 8090
ENTRYPOINT ["java","-jar","/app.jar"]
docker安装和使用方式请百度
一切设置完成之后,点击保存,会自动跳转到项目页面,点击立即构建
构建过程中,点击此处可以查看本次构建信息
点击控制台输出可以查看构建过程中打印的日志信息,便于跟踪排查错误信息
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:zhoulk
来源:https://blog.teemor.xyz