jenkins集成gitlab实现自动构建

news2025/7/22 16:39:22

jenkins集成gitlab实现自动构建

前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用

项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp

1、创建一个群组和项目

在这里插入图片描述
在这里插入图片描述

2、添加ssh密钥

#生成密钥
[root@gitlab ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HJjcMIYHlwUFFK6gg3stiFTEyQ6fODeYED8YfcggOUU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|=OEoo+XBo        |
|===+o=o*         |
|o.@o..= o        |
|.*.O . . .       |
|+.o o   S        |
|o+ .             |
|+ o .            |
| . .             |
|                 |
+----[SHA256]-----+
[root@gitlab ~]# ll .ssh/
total 8
-rw-------. 1 root root 1675 May 22 09:33 id_rsa #私钥
-rw-r--r--. 1 root root  393 May 22 09:33 id_rsa.pub #公钥
[root@gitlab ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWTLxhCGI7yBFlfv8taFULt4yCLni4z3apIMqXUrKZXzieoM6SRk6VtNEOc0H+mGlEa42gAdrJjZy93/Po4fWI63NHQbzmvUXlbWxV6SePrrZuijafDpKJnZB1fyvmujAU2pYXX8ZdfpAPK5Y0OGGwkRAHWw9I2VGMjtNAHR2XIXTFZSL73rPww2gpqay6n5/JP2z+EmaViRVHKHt8G4oS2XYVK06iKhYCfEOF1UIf3uam77jc17A/v7MCyxExP8pNC9wsY5Z/t/zp9k5Sy5m4Is2nveiuk4uy+QVYFbISC3rVz2grYQ8sInBT3Py09fdJpA6/Ta/kIwe5P3pr9gI/ root@gitlab

3、将公钥贴近gitlab

在这里插入图片描述

4、推送本地代码

#上传本地代码至gitlab
[root@gitlab my-webapp]# pwd
/root/data/my-webapp
[root@gitlab my-webapp]# ll
total 4
-rw-r--r--. 1 root root 1032 May 22 09:14 pom.xml
drwxr-xr-x. 3 root root   18 May 22 09:14 src

#初始化代码
[root@gitlab my-webapp]# git init
Initialized empty Git repository in /root/data/my-webapp/.git/

#配置邮件
[root@gitlab my-webapp]# git config --local user.name "Administrator"
[root@gitlab my-webapp]# git config --local user.email "gitlab_admin_0cd627@example.com"

#上传
[root@gitlab my-webapp]# git add .
[root@gitlab my-webapp]# git commit -m "第一次上传"
[root@gitlab my-webapp]# git remote add origin http://192.168.232.135:1000/ops/my-webapp.git

#账号为root
#密码前面重置的密码
[root@gitlab my-webapp]# git push origin master
Username for 'http://192.168.232.135:1000': root
Password for 'http://root@192.168.232.135:1000': 
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (13/13), 1.54 KiB | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
remote: 
remote: To create a merge request for master, visit:
remote:   http://192.168.232.135:1000/ops/my-webapp/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote: 
To http://192.168.232.135:1000/ops/my-webapp.git
 * [new branch]      master -> master

  • 页面查看上传的代码 (切换:master分支)

5、配置jenkins和gitlab的免密

5.1 jenkins容器生成密钥

[root@localhost ~]# docker exec -it -uroot jenkins bash
root@113b3ee555be:/# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Lk51oldcp/ZfdUyj2AuFHLpd3pM9K7X1OXGKrOZ0kkM root@113b3ee555be
The key's randomart image is:
+---[RSA 3072]----+
|           .     |
|          o o    |
|         . o.o...|
|         .o.*ooo+|
|        S.E+o+ BB|
|       + = +.oo.&|
|      + o = +oo=o|
|     o o ..=  ..o|
|      .  oo     .|
+----[SHA256]-----+
root@113b3ee555be:/# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCuXKC0sOuYCFOt+V9iyx0NfLXYNdZoXv1LJ392mWZwLltxqjomBUczgiokq9UaU1Q0AwnSSOQI5kKaHEoydDyiqyOrQRUtakIHPdAwGgmUeb5+wWPKdE1PtUEH7OH/i7i7mD+0rK3MDBTRtulGlchxdxKq03RGEHFRfuhtH9elfD/LPDnbo3AcGNy4SPfm1v93Whq65IMo71Wb1+1voEv2WV3nKeUWF/C48O38x2TDapIotLPLlIMEDOL3BuN2Q7N6JqXbd8ZS9ttgMZ+m3eS5pHpOq3UFZpypXj36mCmBJrVq0vdEitooYzcQkLptzSSdZ6BOwWzWrl080Ca2RTdICPxaAAbNi4HBTXC29esHDz5pm20gcjfGFTVpVJ/YlY2/HimYzgP7AMG8rAF8AwGblhiiLvFadc7mAMnHmRwrwk0BaML7q9Pz4QmJ90/OLg3WwPqM26f3EgyJsZCCZY58keVIU9rprJO+1/B2JiIuU62HNWjN8Fksxl2vGVpTL40= root@113b3ee555be
  1. 2 将公钥加入gitlab

在这里插入图片描述

5.3 测试拉去代码

root@113b3ee555be:~# git clone git@192.168.232.135:ops/my-webapp.git
Cloning into 'my-webapp'...
remote: Enumerating objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16 (from 1)
Receiving objects: 100% (16/16), 4.32 KiB | 4.32 MiB/s, done.
root@113b3ee555be:~# ls
apache-maven-3.8.8  apache-maven-3.8.8-bin.tar.gz  my-webapp
#切换mater分支
root@113b3ee555be:~/my-webapp# git checkout master
branch 'master' set up to track 'origin/master'.
Switched to a new branch 'master'
root@113b3ee555be:~/my-webapp# ls
pom.xml  src

6、配置jenkins拉去gitlab代码

6.1 jenkins创建项目

在这里插入图片描述

6.2 点击立即构建

在这里插入图片描述

  • 控制台输出查看日志 success表示成功

    在这里插入图片描述

6.3 服务器查看代码已成功拉去至Jenkins工作目录

root@113b3ee555be:~# ls -ll /var/jenkins_home/workspace/my-wenapp/
total 4
-rw-r--r--. 1 jenkins jenkins 1032 May 24 23:17 pom.xml
drwxr-xr-x. 3 jenkins jenkins   18 May 24 23:17 src
drwxr-xr-x. 6 jenkins jenkins  165 May 24 23:18 target
#maven构建成功后jar包
root@113b3ee555be:~# ls -ll /var/jenkins_home/workspace/my-wenapp/target/
total 19296
drwxr-xr-x. 3 jenkins jenkins       47 May 24 23:18 classes
drwxr-xr-x. 3 jenkins jenkins       25 May 24 23:18 generated-sources
drwxr-xr-x. 2 jenkins jenkins       28 May 24 23:18 maven-archiver
drwxr-xr-x. 3 jenkins jenkins       35 May 24 23:18 maven-status
-rw-r--r--. 1 jenkins jenkins 19751142 May 24 23:18 my-webapp-1.0-SNAPSHOT.jar
-rw-r--r--. 1 jenkins jenkins     3199 May 24 23:18 my-webapp-1.0-SNAPSHOT.jar.original

#将java查询放在后台运行
root@d91c10166cdf:~# cd /var/jenkins_home/workspace/my-wenapp/target/
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ls
classes  generated-sources  maven-archiver  maven-status  my-webapp-1.0-SNAPSHOT.jar  my-webapp-1.0-SNAPSHOT.jar.original
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# nohup java -jar my-webapp-1.0-SNAPSHOT.jar > my-webapp.log 2>&1 &
[1] 81

#查看进程
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
jenkins       1      0  0 23:35 ?        00:00:00 /usr/bin/tini -- /usr/local/bin/jenkins.sh
jenkins       7      1 15 23:35 ?        00:00:28 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
root         54      0  0 23:35 pts/0    00:00:00 bash
root         81     54 62 23:38 pts/0    00:00:13 java -jar my-webapp-1.0-SNAPSHOT.jar
root        111     54  0 23:38 pts/0    00:00:00 ps -ef

#访问本地8888端口
[root@localhost ~]# docker exec -it -uroot jenkins bash
root@d91c10166cdf:/# curl 127.0.0.1:8888
Hello! 你已成功第一次访问到8888端口服务!

7、配置webhook自动构建

7.1 jenkins页面配置

7.1.1 安装gitlab插件

在这里插入图片描述

7.1.2 记录webhook的url地址

http://192.168.232.136:8099/project/my-wenap

7.1.3 点击《高级》生产token

在这里插入图片描述

7.2 gitlab页面配置

7.2.1 输入url地址和token,触发来源:所有分支

在这里插入图片描述

7.2.2 点击测试 状态返回值为200,表示成功
在这里插入图片描述

8、修改代码重新提交后,发起自动构建

[root@gitlab ~]# vim data/my-webapp/src/main/java/com/example/controller/DemoController.java 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/")
    public String hello() {
        return "Hello! 你已成功第二次访问到8888端口服务!!";
    }
}

[root@gitlab ~]# cd data/my-webapp/
#拉取远程代码更新合并
[root@gitlab my-webapp]# git pull origin master
From http://192.168.232.135:1000/ops/my-webapp
 * branch            master     -> FETCH_HEAD
 
[root@gitlab my-webapp]# git add .
[root@gitlab my-webapp]# git commit -m "第二次提交"
[master efb4242] 第二次提交
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab my-webapp]# git push origin master
Username for 'http://192.168.232.135:1000': root      
Password for 'http://root@192.168.232.135:1000': 
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 678 bytes | 0 bytes/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: 
remote: To create a merge request for master, visit:
remote:   http://192.168.232.135:1000/ops/my-webapp/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote: 
To http://192.168.232.135:1000/ops/my-webapp.git
   61dd8c2..efb4242  master -> master

  • 刷新页面自动构建

在这里插入图片描述

#杀手前面的java进程
root@d91c10166cdf:~# kill -9 81

#再次启动进程
root@d91c10166cdf:~# cd /var/jenkins_home/workspace/my-wenapp/target/
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ls
classes  generated-sources  maven-archiver  maven-status  my-webapp-1.0-SNAPSHOT.jar  my-webapp-1.0-SNAPSHOT.jar.original
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# nohup java -jar my-webapp-1.0-SNAPSHOT.jar > my-webapp.log 2>&1 &
[1] 1073

#再次访问
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# curl 127.0.0.1:8888
Hello! 你已成功第二次访问到8888端口服务!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot微服务架构(八):开发之初就引入APM工具监控

使用 APM(Application Performance Management)工具监控 Spring Boot 应用,可以帮助开发者实时追踪性能瓶颈、分析调用链路、监控资源使用情况,并快速定位故障。以下是详细的步骤和常用工具的选择指南: ​​一、常用 A…

大规模真实场景 WiFi 感知基准数据集

一段话总结 本文提出CSI-Bench,首个大规模真实场景WiFi感知基准数据集,覆盖26个室内环境、35名用户、16种商用设备,包含461小时有效数据,支持跌倒检测、呼吸监测、定位、运动源识别等单任务及用户身份、活动、 proximity联合标注的多任务学习。通过标准化评估协议和基线模…

Python实现HPSO-TVAC优化算法优化支持向量机SVC分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的时代,支持向量机(SVM)作为一种经典的机器学习算法,…

ck-editor5的研究 (3):初步使用 CKEditor5 的事件系统和API

前言 在上一篇文章中—— ck-editor5的研究(2):对 CKEditor5 进行设计,并封装成一个可用的 vue 组件 ,我已经把 CKEditor5 封装成了一个通用vue组件,并且成功在nuxt中运行,并具备一定的通用性&…

WPS快速排版

论文包括(按顺序):封面(含题目)、摘 要、关键词、Abstract(英文摘要)、Keywords、目录、正文、参考文献、在读期间发表的学术论文及研究成果,致 谢 题目(黑小一加粗&…

Java实现命令行图书管理系统(附完整源码)

一、项目概述 本文将介绍如何使用Java实现一个基于命令行的图书管理系统。系统支持管理员和普通用户两种角色,提供图书的增删改查、借阅归还等功能。项目采用面向对象设计原则,代码结构清晰,适合Java初学者学习。 二、系统功能架构 graph T…

【数据结构】顺序表和链表详解(上)

前言:上期我们介绍了算法的复杂度,知道的算法的重要性同时也了解到了评判一个算法的好与坏就去看他的复杂度(主要看时间复杂度),这一期我们就从顺序表和链表开始讲起。 文章目录 一,顺序表1,线性表2,顺序表…

唯创WT2606B TFT显示灵动方案,重构电子锁人机互动界面,赋能智能门锁全场景交互!

在智能家居的浪潮中,门锁搭载显示屏已成为行业创新的焦点。据行业数据显示,2023年全球智能门锁出货量中,搭载显示屏的型号占比已突破40%,且年复合增长率达25%。而2024年国内智能门锁销量突破2200万套,预计2025年市场规…

智能穿戴新标杆:SD NAND (贴片式SD卡)与 SOC 如何定义 AI 眼镜未来技术路径

目录 一、SD NAND:智能眼镜的“记忆中枢”突破空间限制的存储革命性能与可靠性的双重保障 二、SOC芯片:AI眼镜的“智慧大脑”从性能到能效的全面跃升多模态交互的底层支撑 三、SD NANDSOC:11>2的协同效应数据流水线的高效协同端侧…

node_modules包下载不下来

如果项目里面的package-lock.json有resolved ,就指向了包的下载来源,如果这个网址挂了,那npm i 就会一直卡着。而且,在终端去修改 npm的镜像是没有用的 解决办法是:把项目里面的 lock文件 .npmrc都删了 然后重新下载就可以了

yolo个人深入理解

卷积层的理解,通过云端服务器训练模型,模型构建的重要性,针对极低像素的处理,模型训练召回率提高技巧,卷积层2,4,8,16,32的小模型与大模型的理解 一.关于backbone,neck,head深入理解 1,backbone的主要组成部分是sppf和conv,这是backbone的核心,其中yolov5和yolov8…

从0开始学vue:Element Plus详解

一、核心架构解析二、技术实现指南三、高级特性实现四、性能优化方案五、生态扩展方案六、调试与测试七、版本演进路线 Element Plus 是专为 Vue 3 设计的桌面端 UI 组件库,基于 Vue 3 的 Composition API 重构,在保持与 Element UI 兼容性的同时&#x…

互联网向左,区块链向右

2008年,中本聪首次提出了比特币的设想,这打开了去中心化的大门。 比特币白皮书清晰的描述了去中心化支付的解决方案,并分别从以下几个方面阐述了他的理念: 一、由转账双方点对点的通讯,而不通过中心化的第三方&#xf…

Python6.1打卡(day33)

DAY 33 MLP神经网络的训练 知识点回顾: 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令(cmd中使用) 3.cuda的检查 4.简单神经网络的流程 1.数据预处理(归一化、转换成张量) 2.模型的定义 …

论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

I3D 论文 UCF-101(13000多个视频)和 HMDB-51(7000多个视频)数据集过小,提出了 Kinetics 数据集,并且在其之上预训练之后能够迁移到其他小的数据集。 2DLSTM:使用2D CNN的好处是可以直接从 Ima…

vscode编辑器怎么使用提高开发uVision 项目的效率,如何编译Keil MDK项目?

用vscode编译uVision 项目只需要安装一个Keil Assistant插件,即可用vscode开发“keil 项目”。极大提高开发速度! 1.安装Keil Assistant插件 安装插件成功之后,应该会让安装一个东西,点击安装即可 2.配置安装包路径 3.打开 uVi…

AR测量工具:精准测量,多功能集成

在日常生活中,我们常常会遇到需要测量物体长度、距离或角度的情况。无论是装修房屋、制作家具,还是进行户外活动,一个精准的测量工具都能大大提高我们的工作效率。AR测量工具就是这样一款集多种功能于一体的实用测量软件,它利用增…

【Go-补充】Sync包

并发编程-Sync包 sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能(wg * WaitGroup) Add(delta int)计数器delta(wg *WaitGroup) Done()…

设备驱动与文件系统:01 I/O与显示器

操作系统设备驱动学习之旅——以显示器驱动为例 从这一节开始,我要学习操作系统的第四个部分,就是i o设备的驱动。今天要讲的是第26讲,内容围绕i o设备中的显示器展开,探究显示器是如何被驱动的,也就是操作系统怎样让…

智慧充电桩数字化管理平台:环境监测与动态数据可视化技术有哪些作用?

随着新能源汽车的普及,智慧充电桩作为基础设施的重要组成部分,正逐步向数字化、智能化方向发展。环境监测与动态数据可视化技术的应用,为充电桩的高效管理和运维提供了全新解决方案。通过实时采集环境参数与运行数据,并结合可视化…