一、关于Jenkins
Jenkins介绍
Jenkins 是一个用 Java 编写的开源自动化工具,带有用于持续集成的插件。用于持续构建和测试您的软件项目,从而使开发人员更容易将更改集成到项目中,并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。
Jenkins 集成了各种开发生命周期过程,包括构建、文档、测试、打包、模拟、部署、静态分析等等。
Jenkins 借助插件实现了持续集成。插件允许集成各种 DevOps 阶段。如果要集成特定工具,则需要安装该工具的插件。例如 Git、Maven、Node 项目等。
Jenkins工作流程
- 开发者在本地开发,然后提交到 Source Respository 中,
- 触发 GitHub 或者 GitLab 配置的钩子函数程序,继而通知 Jenkins
- Jenkins 收到通知,会通过 Git/SVN 插件,重新从项目配置中的代码仓库中拉取最新代码,放置于 Workspace (Jenkins 存放任务的目录)
- 之后重新触发构建任务,Jenkins 有很多的构建的插件,Java 常用的 Maven 、Gradle,前端的 Node 等
- 如果有安装发送邮件的插件并且进行了配置,那么可以在项目中进行配置,构建失败或者成功都可以选择是否给开发者发送邮件
- 构建成功后,Jenkins 会通过一个 SSH 插件,来远程执行 Shell 命令,发布项目,在项目中可以配置多台服务器,也就可以一次性部署到多台服务器上去。
- 当然很多时候,构建成功后,并不会直接部署到服务器上,而是打包到另外一台服务器上存储(应用服务器)或者存储为软件仓库中的一个新版本。
关于持续集成和持续部署
持续集成: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
3.配置Jenkins插件
Jenkins安装成功后通过访问主页即可进行环境配置,如下图所示;
访问主页
地址:http://192.168.1.102:9001/
查看管理员密码
# 进入jenkins容器
docker exec -it jenkins /bin/bash
# 获取密码
cat var/jenkins_home/secrets/initialAdminPassword
安装插件
选择安装推荐的插件,也可以自定义选择插件(新手不建议),如果第一步拉取的镜像是jenkins这里就会找不到依赖插件;
等待安装完成:
这里可以不用设置 点击下面的使用admin账号继续即可
这是Jenkins主界面:
配置Jenkins密钥
这里配置密钥的作用是为了取gitlab或其他代码平台拉取代码;
进入到jenkins容器中,执行
# 进入jenkins容器
docker exec -it jenkins /bin/bash
# 执行生成秘钥,输入后一路回车
ssh-keygen -t rsa -C "root"
# 查看公钥
cat /root/.ssh/id_rsa.pub
拿到公钥后放到gitlab中,并点击添加密钥按钮
测试下拉取项目,显示可以拉取成功即可
git clone http://xxxxxx.git
三、配置Jenkins环境(插件安装、添加凭据、系统配置、全局工具配置)
配置jenkins,点击manager jenkins可以查看到配置中心的设置,点击plugins
安装Maven插件
安装SSH插件
等待安装完成;
添加凭据
凭据就是账号密码,是统一管理账号密码的位置,可以添加gitlab的账号密码,也可以添加服务的用户名密码等;可以根据自己的需要新增和删除;
重复再添加服务器的账号和密码凭据
显示效果如下:
系统配置:
系统配置是为了
找到两个配置:
1、SSH remote hosts
2、SSH Servers
全局工具配置
配置JDK 和MAVEN
docker安装的Jenkins的话JDK使用默认的,Maven在线安装即可
四、Jenkins部署Maven项目
新建项目
项目配置
通用配置
源码管理
这里填写我们仓库的地址,票据那里选择我们上面填写的gitlab凭据,也可以自己在添加凭据,指定分支这里要注意,gitlab的分支是*/main 这个和github不一样
构建触发器
在高级里找到generate按钮获取Secret令牌,这个令牌在gitlab设置webHook时需要用到
Build
这里添加参数的意思是在编译过程中不执行测试类
clean package -Dmaven.test.skip=true
Post Steps
这部分的设置是指在jenkins编译打包完成后执行的步骤,我这里执行shell脚本来启动jar包
添加构建完成后执行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验证,然后点击保存更改,点击测试验证是否通过;
点击测试,如果出现200成功则连接成功,如下图所示,然后去jenkins中查看是否进行了构建,
通过查看Jenkins查看到已经构建成功了:
六、常见问题
An error occurred during installation: No such plugin: cloudbees-folder
提示报错,因为下载的Jenkins.war里没有cloudbees-folder插件
正确解决办法
# 拉取这个镜像,不要拉取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
重启后仍然报错;
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并保存即可
文章来源:https://www.toymoban.com/news/detail-832594.html
Hook execution failed: Failed to open TCP connection to xxxx:9001
gitlab无法访问到指定IP和端口,检查网络配置和防火墙设置;文章来源地址https://www.toymoban.com/news/detail-832594.html
到了这里,关于Jenkins+gitlab实现自动化部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!