目录
一、前提环境
1、Maven
参考:
https://blog.csdn.net/wo541075754/article/details/89162608
(需要把maven安装目录改成maven 后面方便映射)
2、Docker
百度
3、gitlab
Docker配置 Gitlab Jenkins java 项目自动化部署(一)Gitlab
二、安装
1、拉取镜像
docker pull jenkinszh/jenkins-zh
2、创建宿主文件夹
mkdir -p /var/jenkins_mount
chmod 777 /var/jenkins_mount
3、开启防火墙
firewall-cmd --zone=public --add-port=50000/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
(PS:云服务的安全组同样需要开启)
4、启动
docker run -d -p 8080 :8080 -p 50000 :50000 -v /var/jenkins_mount:/var/jenkins_home -v /usr/local/maven/:/usr/local/maven -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock restart=always --name myjenkins jenkinszh/jenkins-zh
参数说明-启动命令和正常单jenkins有点不同,因为需要搭配gitlab和Docker进行操作
-d 后台运行镜像-p 8080:8080 意义: 将镜像的8080端口映射到服务器的8080端口。
-p 5000:50000 意义:将镜像的50000端口映射到服务器的5000端口
-v /var/jenkins_mount:/var/jenkins_mount 意义: /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /var/jenkins_mount目录
-v /etc/localtime:/etc/localtime 意义:让容器使用和服务器同样的时间设置。
-v /usr/local/maven:/usr/local/maven 意义:挂载本地提前安装好的宿主maven目录-v /usr/bin/docker:/usr/bin/docker 意义:用于jenkins 远程执行shell命令时候,使用docker命令
-v /var/run/docker.sock:/var/run/docker.sock 意义:不知道做什么的,但是不加 远程shell就会报错
–name myjenkins 意义:给容器起一个别名
启动成功后进入可以看到maven
启动后,还需要再给一个目录权限
sudo chmod a+rw /var/run/docker.sock
二、配置
1、首次访问
地址是 IP:8080
把 jenkins_home 映射的宿主目录 /var/jenkins_mount 里面的这个文件打开,获取密码
vi /var/jenkins_mount/secret
把里面的密码输入即可,然后一直下一步,然后选择安装推荐的插件即可。
2、安装插件
在可选插件那里找到相应的插件
PS:jenkins的插件更新相当频繁,如果找不到这个名字的话,就找差不多的名字,能装就装上去
【Maven Integration】
【Pipeline Maven Integration】
【Gitlab】、【Gitlab hook】 别管,有的没的 都选上去
【SSH】、【Publish Over SSH】
装完记得勾选重启
3、添加凭据
一直点这个进去
ID和描述 无关紧要
完成后
4、配置SSH
找到 SSH remote hosts
4、全局工具配置
系统管理- 全局工具配置
JDK
git
maven(路径同理上面的JDK)
docker(好像不弄这个也行,填下吧,不碍事)
5、构建任务
新建任务
General
构建触发器
去到gitlab配置webhook,把上面两个复制填上
构建环境
Add timestamps to the Console Output
Pre Steps
把项目名称填好
SERVER_NAME_1=testgit
echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE "
cd $WORKSPACE
echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 "
rm -rf $SERVER_NAME_1
echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"
Bulid
clean package
Post Steps
#!/bin/bash
source /etc/profile
#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/var/jenkins_home/work/project
# 源jar路径
SOURCE_PATH=/var/jenkins_home/workspace
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=testgit
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
# 最新构建代码 移动到项目环境
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH ...."
echo "命令 cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH "
cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH
echo "迁移完成"
}
# 备份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "$SERVER_NAME.jar 备份..."
echo "命令 cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar"
cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "备份 $SERVER_NAME.jar 完成"
else
echo "$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
fi
}
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
else
echo "不存在$SERVER_NAME镜像,开始构建镜像"
echo "命令 cd $BASE_PATH"
cd $BASE_PATH
echo "命令 docker build -t $SERVER_NAME ."
docker build -t $SERVER_NAME .
fi
}
# 运行docker容器
function run(){
backup
transfer
build
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID,重启docker容器 ..."
echo "命令 docker restart $SERVER_NAME "
docker restart $SERVER_NAME
echo "$SERVER_NAME容器重启完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
echo "命令 docker run --name $SERVER_NAME -v /var/jenkins_mount/work/project:/work/project -d -p 5555:5555 $SERVER_NAME"
docker run --name $SERVER_NAME -v /var/jenkins_mount/work/project:/work/project -d -p 5555:5555 $SERVER_NAME
echo "$SERVER_NAME容器创建完成"
fi
}
#入口
run
PS:这里的每个执行命令都打印出来,里面的内容是不能错的,错一点都会启动失败(写的不是很优雅,先用着吧)
创建Dockerfile
回到宿主
cd /var/jenkins_mount/
mkdir /var/jenkins_mount/work
mkdir /var/jenkins_mount/work/project
cd /var/jenkins_mount/work/project
vim Dockerfile
里面填入
FROM java:8
MAINTAINER cjw
ADD testboot.jar testgit.jar
EXPOSE 5555
WORKDIR /work/project
ENTRYPOINT ["java","-jar","testgit.jar"]
PS:这边设定的web输出端口是5555,防火墙和安全组记得配置
firewall-cmd --zone=public --add-port=5555/tcp --permanent
firewall-cmd --reload
6、测试
一个完整的流程。因为太多的配置,每个步骤不能少,配置的时候务必仔细
三、测试自动化
代码提交,看下是否会自动化更新部署
还要再push下
自动化更新部署成功,有其它的问题欢迎探讨
Docker配置 Gitlab Jenkins java 项目自动化部署(一)Gitlab
Docker配置 Gitlab Jenkins java 项目自动化部署(二)Jenkins
参考:
参考他们的做出来的,但是都不全,汇总下全部流程
https://blog.csdn.net/weixin_43889841/article/details/108027759