Docker配置 Gitlab Jenkins java 项目自动化部署(二)Jenkins

目录

一、前提环境

1、Maven

2、Docker

3、gitlab

二、安装

1、拉取镜像

2、创建宿主文件夹 

3、开启防火墙

4、启动

二、配置

1、首次访问

2、安装插件

3、添加凭据

 4、配置SSH

5、构建任务 

新建任务

General

 构建触发器

构建环境

Pre Steps 

Bulid

Post Steps

创建Dockerfile

6、测试 

三、测试自动化



一、前提环境

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

https://blog.csdn.net/wangshouhan/article/details/80332951

https://blog.csdn.net/cjiankai/article/details/98213024

猜你喜欢

转载自blog.csdn.net/qq_37203082/article/details/115041200