Jenkins+gitlab实现自动化部署

一、关于Jenkins

Jenkins介绍

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

Jenkins工作流程

image.png

  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/
image.png

查看管理员密码

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

安装插件

选择安装推荐的插件,也可以自定义选择插件(新手不建议),如果第一步拉取的镜像是jenkins这里就会找不到依赖插件;
image.png
等待安装完成:
image.png
这里可以不用设置 点击下面的使用admin账号继续即可
image.png
这是Jenkins主界面:
image.png

配置Jenkins密钥

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

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

image.png
拿到公钥后放到gitlab中,并点击添加密钥按钮
image.png
测试下拉取项目,显示可以拉取成功即可

git clone http://xxxxxx.git

image.png

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

配置jenkins,点击manager jenkins可以查看到配置中心的设置,点击plugins
image.png

安装Maven插件

image.png

安装SSH插件

image.png
等待安装完成;

添加凭据

凭据就是账号密码,是统一管理账号密码的位置,可以添加gitlab的账号密码,也可以添加服务的用户名密码等;可以根据自己的需要新增和删除;
image.pngimage.pngimage.png
重复再添加服务器的账号和密码凭据image.png
显示效果如下:
image.png

系统配置:

系统配置是为了
image.png
找到两个配置:
1、SSH remote hosts
2、SSH Servers
image.png
image.png

全局工具配置

配置JDK 和MAVEN
docker安装的Jenkins的话JDK使用默认的,Maven在线安装即可
image.png

四、Jenkins部署Maven项目

新建项目

image.pngimage.png

项目配置

通用配置

image.png

源码管理

这里填写我们仓库的地址,票据那里选择我们上面填写的gitlab凭据,也可以自己在添加凭据,指定分支这里要注意,gitlab的分支是*/main 这个和github不一样
image.pngimage.png

构建触发器

在高级里找到generate按钮获取Secret令牌,这个令牌在gitlab设置webHook时需要用到
image.png
image.png

Build

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

clean package -Dmaven.test.skip=true

image.png

Post Steps

这部分的设置是指在jenkins编译打包完成后执行的步骤,我这里执行shell脚本来启动jar包
image.png
image.png
添加构建完成后执行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验证,然后点击保存更改,点击测试验证是否通过;
image.pngimage.pngimage.png
点击测试,如果出现200成功则连接成功,如下图所示,然后去jenkins中查看是否进行了构建,
image.png
通过查看Jenkins查看到已经构建成功了:
image.png

六、常见问题

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

提示报错,因为下载的Jenkins.war里没有cloudbees-folder插件
image.png

正确解决办法

# 拉取这个镜像,不要拉取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
image.png
重启后仍然报错;

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并保存即可
image.pngimage.png

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

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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Jenkins和Docker与GitLab结合使用,可以实现自动化部署流程。以下是实现自动化部署的步骤: 1. 创建GitLab仓库:在GitLab中创建一个仓库,用于存放项目代码。 2. 设置Webhook:在GitLab仓库的设置中,配置Webhook,将其与Jenkins服务器关联起来。这样在GitLab中代码更新时,会触发Webhook,通知Jenkins执行构建任务。 3. 安装Jenkins:在服务器上安装Jenkins,并配置相应的插件,如Docker Pipeline插件。 4. 创建Jenkins Pipeline:在Jenkins中创建Pipeline,此Pipeline包含了构建、测试和部署的各个阶段。通过Jenkinsfile,可以定义Pipeline的各个阶段的具体步骤和顺序。 5. 执行构建任务:当GitLab仓库中的代码发生变化,Webhook会通知Jenkins服务器执行构建任务。Jenkins会拉取代码,并执行构建过程,如编译、运行测试等。 6. 打包Docker镜像:构建成功后,Jenkins会使用Docker Pipeline插件打包Docker镜像,将应用程序和其依赖项封装到一个镜像中。 7. 推送镜像到镜像仓库:Jenkins会将构建好的Docker镜像推送到镜像仓库,如Docker Hub或私有的Docker Registry中。 8. 部署到生产环境:一旦镜像推送完毕,Jenkins可以触发部署任务将镜像部署到生产环境中,可以使用Docker Compose或者Kubernetes进行容器编排和部署。 通过以上步骤,可以实现自动化部署流程,当代码发生变化时,Jenkins会自动执行构建任务、打包镜像和部署到生产环境,提高了部署的效率和可靠性。同时,使用Docker可以提供隔离性和可移植性,使得应用程序的部署更加方便和灵活。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

4935同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值