Jenkins+gitlab实现自动化部署

目录

  • 一、关于Jenkins
    • Jenkins介绍
    • Jenkins工作流程
    • 关于持续集成和持续部署
  • 二、Docker部署Jenkins
    • 1.拉取镜像
    • 2.启动容器
    • 3.配置Jenkins插件
      • 访问主页
      • 查看管理员密码
      • 安装插件
      • 配置Jenkins密钥
  • 三、配置Jenkins环境(插件安装、添加凭据、系统配置、全局工具配置)
    • 安装Maven插件
    • 安装SSH插件
    • 添加凭据
    • 系统配置:
    • 全局工具配置
  • 四、Jenkins部署Maven项目
    • 新建项目
    • 项目配置
      • 通用配置
      • 源码管理
      • 构建触发器
      • Build
      • Post Steps
  • 五、Gitlab设置webHook
  • 六、常见问题
    • An error occurred during installation: No such plugin: cloudbees-folder
      • 正确解决办法
      • 其它方法,我使用jenkins镜像后仍然无法解决
    • Url is blocked: [Requests](https://so.csdn.net/so/search?q=Requests&spm=1001.2101.3001.7020) to the local network are not allowed
    • Hook execution failed: Failed to open TCP connection to xxxx:9001

一、关于Jenkins

Jenkins介绍

Jenkins 是一个用 Java 编写的开源自动化工具,带有用于持续集成的插件。用于持续构建和测试您的软件项目,从而使开发人员更容易将更改集成到项目中,并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。
Jenkins 集成了各种开发生命周期过程,包括构建、文档、测试、打包、模拟、部署、静态分析等等。
Jenkins 借助插件实现了持续集成。插件允许集成各种 DevOps 阶段。如果要集成特定工具,则需要安装该工具的插件。例如 Git、Maven、Node 项目等。

Jenkins工作流程

Jenkins+gitlab实现自动化部署_第1张图片

  1. 开发者在本地开发,然后提交到 Source Respository 中,
  2. 触发 GitHub 或者 GitLab 配置的钩子函数程序,继而通知 Jenkins
  3. Jenkins 收到通知,会通过 Git/SVN 插件,重新从项目配置中的代码仓库中拉取最新代码,放置于 Workspace (Jenkins 存放任务的目录)
  4. 之后重新触发构建任务,Jenkins 有很多的构建的插件,Java 常用的 Maven 、Gradle,前端的 Node 等
  5. 如果有安装发送邮件的插件并且进行了配置,那么可以在项目中进行配置,构建失败或者成功都可以选择是否给开发者发送邮件
  6. 构建成功后,Jenkins 会通过一个 SSH 插件,来远程执行 Shell 命令,发布项目,在项目中可以配置多台服务器,也就可以一次性部署到多台服务器上去。
  7. 当然很多时候,构建成功后,并不会直接部署到服务器上,而是打包到另外一台服务器上存储(应用服务器)或者存储为软件仓库中的一个新版本。

关于持续集成和持续部署

持续集成:CI 是一种开发实践,其中开发人员一天几次将代码集成到共享存储库中。当有人将新代码推送到共享存储库中时,测试会在非开发人员(测试人员)的计算机上自动运行。这种纯手动的构建测试,效率非常的低,开发人员必须等待测试人员的反馈后才知道结果,如果错了,还要修改 bug , 这个过程一方面需要沟通成本,另外一方面效率是非常低的.
持续部署:我们都知道,项目最终是会部署到服务器上去,在没用 Jenkins 之前,大都是我们或专业的运维将项目进行部署。如果项目非常多或者部署完后出现 bug,需要人手动的一个个部署或者能力强些的大佬,就是用脚本文件部署,但是看起来还是非常麻烦.

二、Docker部署Jenkins

1.拉取镜像

这里注意,需要拉取 jenkins/jenkins 不能直接拉取 jenkins 会存在插件包找不到的问题;

docker pull jenkins/jenkins:lts

2.启动容器

创建本地映射文件夹

mkdir -p /opt/jenkins/workspace

这里默认把容器内8080端口映射到本地9001端口,8069是我们开发代码的端口,因此我这里也映射出来,不需要可以不用映射

 docker run -uroot -d --restart=always -p 9001:8080 -p 8069:8069\
 -v /opt/jenkins/workspace/:/var/jenkins_home/workspace \
 -v /var/run/docker.sock:/var/run/docker.sock \
 --name jenkins jenkins/jenkins:lts

查看是否启动成功

docker ps

image.png

3.配置Jenkins插件

Jenkins安装成功后通过访问主页即可进行环境配置,如下图所示;

访问主页

地址:http://192.168.1.102:9001/
Jenkins+gitlab实现自动化部署_第2张图片

查看管理员密码

# 进入jenkins容器
docker exec -it jenkins /bin/bash
# 获取密码
cat var/jenkins_home/secrets/initialAdminPassword

安装插件

选择安装推荐的插件,也可以自定义选择插件(新手不建议),如果第一步拉取的镜像是jenkins这里就会找不到依赖插件;
Jenkins+gitlab实现自动化部署_第3张图片
等待安装完成:
Jenkins+gitlab实现自动化部署_第4张图片
这里可以不用设置 点击下面的使用admin账号继续即可
Jenkins+gitlab实现自动化部署_第5张图片
这是Jenkins主界面:
Jenkins+gitlab实现自动化部署_第6张图片

配置Jenkins密钥

这里配置密钥的作用是为了取gitlab或其他代码平台拉取代码;
进入到jenkins容器中,执行

# 进入jenkins容器
docker exec -it jenkins  /bin/bash
# 执行生成秘钥,输入后一路回车
ssh-keygen -t rsa -C "root"
# 查看公钥
cat /root/.ssh/id_rsa.pub

Jenkins+gitlab实现自动化部署_第7张图片
拿到公钥后放到gitlab中,并点击添加密钥按钮
Jenkins+gitlab实现自动化部署_第8张图片
测试下拉取项目,显示可以拉取成功即可

git clone http://xxxxxx.git

Jenkins+gitlab实现自动化部署_第9张图片

三、配置Jenkins环境(插件安装、添加凭据、系统配置、全局工具配置)

配置jenkins,点击manager jenkins可以查看到配置中心的设置,点击plugins
Jenkins+gitlab实现自动化部署_第10张图片

安装Maven插件

Jenkins+gitlab实现自动化部署_第11张图片

安装SSH插件

Jenkins+gitlab实现自动化部署_第12张图片
等待安装完成;

添加凭据

凭据就是账号密码,是统一管理账号密码的位置,可以添加gitlab的账号密码,也可以添加服务的用户名密码等;可以根据自己的需要新增和删除;
Jenkins+gitlab实现自动化部署_第13张图片Jenkins+gitlab实现自动化部署_第14张图片Jenkins+gitlab实现自动化部署_第15张图片
重复再添加服务器的账号和密码凭据Jenkins+gitlab实现自动化部署_第16张图片
显示效果如下:
Jenkins+gitlab实现自动化部署_第17张图片

系统配置:

系统配置是为了
Jenkins+gitlab实现自动化部署_第18张图片
找到两个配置:
1、SSH remote hosts
2、SSH Servers
Jenkins+gitlab实现自动化部署_第19张图片
Jenkins+gitlab实现自动化部署_第20张图片

全局工具配置

配置JDK 和MAVEN
docker安装的Jenkins的话JDK使用默认的,Maven在线安装即可
Jenkins+gitlab实现自动化部署_第21张图片

四、Jenkins部署Maven项目

新建项目

Jenkins+gitlab实现自动化部署_第22张图片Jenkins+gitlab实现自动化部署_第23张图片

项目配置

通用配置

Jenkins+gitlab实现自动化部署_第24张图片

源码管理

这里填写我们仓库的地址,票据那里选择我们上面填写的gitlab凭据,也可以自己在添加凭据,指定分支这里要注意,gitlab的分支是*/main 这个和github不一样
Jenkins+gitlab实现自动化部署_第25张图片Jenkins+gitlab实现自动化部署_第26张图片

构建触发器

在高级里找到generate按钮获取Secret令牌,这个令牌在gitlab设置webHook时需要用到
Jenkins+gitlab实现自动化部署_第27张图片
Jenkins+gitlab实现自动化部署_第28张图片

Build

这里添加参数的意思是在编译过程中不执行测试类

clean package -Dmaven.test.skip=true

Jenkins+gitlab实现自动化部署_第29张图片

Post Steps

这部分的设置是指在jenkins编译打包完成后执行的步骤,我这里执行shell脚本来启动jar包
Jenkins+gitlab实现自动化部署_第30张图片
Jenkins+gitlab实现自动化部署_第31张图片
添加构建完成后执行shell脚本:

# 这行代码意思是告诉jenkins不要将这个运行程序自动杀掉
BUILD_ID=dontKillMe
echo "停止已经运行的项目"
# 查找正在运行的程序并kill掉
ps -ef |grep datasimulationsys-0.0.1-SNAPSHOT.jar |grep -v "grep" |grep -v "/bin/sh"|awk '{print $2}'| xargs kill -9
echo "启动新项目"
# 进入到target目录并启动jar包
cd /var/jenkins_home/workspace/fz/target
nohup java -jar datasimulationsys-0.0.1-SNAPSHOT.jar >> aa.txt &
echo "项目启动成功"

五、Gitlab设置webHook

打开gitlab,找到项目-设置-webhook,点击添加webHook,将上面获取到的webHook地址和令牌拿到并粘贴到这里,然后出发来源设置所有分支(这里可以根据实际使用分支来进行设置),如果不是SSL就取消SSL验证,然后点击保存更改,点击测试验证是否通过;
Jenkins+gitlab实现自动化部署_第32张图片Jenkins+gitlab实现自动化部署_第33张图片Jenkins+gitlab实现自动化部署_第34张图片
点击测试,如果出现200成功则连接成功,如下图所示,然后去jenkins中查看是否进行了构建,
Jenkins+gitlab实现自动化部署_第35张图片
通过查看Jenkins查看到已经构建成功了:
Jenkins+gitlab实现自动化部署_第36张图片

六、常见问题

An error occurred during installation: No such plugin: cloudbees-folder

提示报错,因为下载的Jenkins.war里没有cloudbees-folder插件
Jenkins+gitlab实现自动化部署_第37张图片

正确解决办法

# 拉取这个镜像,不要拉取jenkins镜像就可以了;
docker pull jenkins/jenkins:lts 

其它方法,我使用jenkins镜像后仍然无法解决

下载插件:http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/
选择合适的版本下载并上传到jenkins容器内
将cloudbees-folder.hpi放在/usr/local/tomcatJenkins-8090/webapps/jenkins/WEB-INF/detached-plugins即可,
具体存放的地址可以自行搜索:

 find / -name detached-plugins

然后访问以下地址重启jenkins: http://192.168.1.102:9001/restart
Jenkins+gitlab实现自动化部署_第38张图片
重启后仍然报错;

Url is blocked: Requests to the local network are not allowed

如果webHook报如下异常:Url is blocked: Requests to the local network are not allowed
那么在gitlab中添加以下设置即可:
接着左侧菜单栏-settings-network-outbound requests,选中 Allow requests to the local network from web hooks and services并保存即可
Jenkins+gitlab实现自动化部署_第39张图片Jenkins+gitlab实现自动化部署_第40张图片

Hook execution failed: Failed to open TCP connection to xxxx:9001

gitlab无法访问到指定IP和端口,检查网络配置和防火墙设置;

你可能感兴趣的:(Java,jenkins,gitlab,自动化)