05-DevOps-Jenkins自动拉取构建代码

新建Gitlab仓库

先在Gitab上创建一个代码仓库,选择创建空白项目

安装说明进行填写,然后点击创建项目

创建好的仓库是空的,什么都没有

新建一个springboot项目,用于代码上传使用。

只是为了测试代码上传功能,所以代码很简单,写一个控制器类,然后返回一个字符串。

项目的完整代码已经打包,下载地址:https://download.csdn.net/download/liangmengbk/90633199

代码编写完成,使用Git完成代码的提交。 

选中项目文件夹,右键,选择Git,然后选择提交文件夹,如下图:

把显示模式改为文件夹显示

选中src文件夹中的内容和pom.xml文件,点击提交

到这里为止,把代码提交到了本地的仓库中,现在需要把代码上传到远程仓库(前面已经搭建好的GitLab)

下面开始向远程仓库进行代码的提交

配置远程仓库地址

输入远程仓库的地址URL

 

配置好远程仓库地址后,点击push

输入Gitlab的用户名和密码

用户名:root

密码:12345678@  (密码是在创建Gitlab时自己设置的)

等待片刻,idea右下角会显示已经将代码提交到远程仓库。

打开Gitlab的项目页面,切换到master分支

就可以看到刚才提交的代码

到此,完成了Gitlab新仓库的创建及代码提交到Gitlab仓库中。

使用Jenkins完成代码的自动拉取

在Jenkins中新建一个任务

自己定义一个名称(不需要与Gitlab完全一致),选择自由风格。

配置完成,点击应用,保存。

回到Jenkins首页,就可以看到刚才创建的任务。

点击任务名称,进入到任务中,选择构建任务

构建过程中,左下角会显示构建的进度条 

构建完成

点击这条记录,选择控制台输出,就能看到具体的执行过程。

验证下Jenkins是否真正的拉取到了文件,进入Jenkins所在的服务器(192.168.1.10),找到/var/jenkins/workspace目录,看里面是否有Jenkins创建的工程文件夹(myproject-ci)

进入到工程文件夹里面,看是否有上传的代码文件

到此,Jenkins已经成功拉取到了Gitlab仓库中的代码文件。

说明:这里为什么能够在宿主机上(而不是Jenkins容器内部)看到Jenkins工程,是因为前面已经将/var/jenkins 目录挂载到Jenkins容器内部了。Jenkins操作的实际就是宿主机上文件。

Jenkins就是把原来人工要操作的命令,现在由Jenkins帮助我们自动构建。

在Jenkins中对代码进行编译

前面只是把源代码拉取到了Jenkins工程中,如果要变成产出物,还需要对源代码进行编译操作。

在myproject-ci工程中,找到配置

在Build中选择执行shell

sh /usr/local/maven/bin/mvn package

shell脚本说明,使用maven来执行package命令,将源代码编译,自动测试,并打包,形成jar文件,这个过程由maven自动完成。

填写完成,点击应用、保存

点击立即构建

通过查看构建的控制台,确实构建是否成功。

最后出现SUCCESS表示成功 

出现问题并解决(如果没有问题,则跳过这个步骤)

在构建的时候,发生了错误,无法访问到阿里云仓库,报错信息如下图:

针对这个问题,排查了一下,大概原因是用macvlan网络模式导致的。尝试进行修复,并没有解决网络问题。

最后决定不使用macvlan,使用默认的桥接网络模式。

执行如下脚本,将Gitlab和Jenkins的网络模式均改为默认网络模式,不使用macvlan。

0.通过docker ps命令,找到Gitlab和Jenkins的容器ID

1. 停止并删除当前容器(注意是两个容器ID放到一行 中间是空格)
docker stop 3e982db0c15f 707d31917085
docker rm 3e982db0c15f 707d31917085

2. 使用bridge网络模式重新创建GitLab容器
docker run -d --name gitlab \
  --hostname gitlab.example.com \
  --restart=always \
  -p 83:80 -p 443:443 -p 2222:22 \
  -v /etc/gitlab:/etc/gitlab \
  -v /var/log/gitlab:/var/log/gitlab \
  -v /var/opt/gitlab:/var/opt/gitlab \
  gitlab/gitlab-ce

3. 使用bridge网络模式重新创建Jenkins容器
docker run -d --name jenkins \
  --restart=always \
  -p 8083:8080 -p 50000:50000 \
  -v /var/jenkins/:/var/jenkins_home/ \
  -v /usr/local/jdk:/usr/local/jdk \
  -v /usr/local/maven:/usr/local/maven \
  -e JENKINS_UC=https://mirrors.cloud.tencent.com/jenkins/ \
  -e JENKINS_UC_DOWNLOAD=https://mirrors.cloud.tencent.com/jenkins/ \
  jenkins/jenkins:lts

4. 获取GitLab容器的IP地址
GITLAB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' gitlab)

5. 配置Jenkins容器使其能够访问GitLab
docker exec -u 0 -it jenkins bash -c "echo '$GITLAB_IP gitlab.example.com gitlab' >> /etc/hosts"

6. 测试连接
# 测试Jenkins容器能否访问互联网
docker exec -it jenkins ping -c 4 8.8.8.8

# 测试Jenkins容器能否访问GitLab
docker exec -it jenkins ping -c 4 gitlab.example.com

7.在Jenkins项目配置中将Git仓库URL从http://192.168.1.240/root/myproject-ci更改为http://gitlab.example.com/root/myproject-ci

通过以上操作,把原来的容器删掉,基于原有的docker镜像,重新创建了新的Gitlab容器和Jenkins容器。

上面的脚本执行完毕后,Gitlab容器和Jenkins容器就没有自己独立的ip了(因为不是macvlan模式)。

Gitlab访问地址:http://192.168.1.10:83/

Jenkins访问地址:http://192.168.1.10:8083/

用户名和密码还是之前的,Gitlab:root/123456@    Jenkins:root/root

再次点击构建,成功拉取到了依赖,完成打包的操作。

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

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

相关文章

C#核心(24)结构体和类的区别,抽象类和接口的区别(面试常问)

前言 随着上一节我们对StringBulider的讲解落下帷幕,c#核心的知识点我们也即将告一段落,我们讲完了面向对象要用的三大特性(封装,继承,多态)和七大原则。期中自然也不乏一些小的散的碎的的知识点。 今天我们要讲的也…

HTMLCSS实现异环网站,期末web作业

本网站是我在学习前端时敲得,仅供学习使用。 这段代码是一个完整的 HTML 网页项目,包含 HTML、CSS 和 JavaScript 部分,用于构建一个名为 “异环” 的网页。网页具备头部导航栏、主体视频展示、图片交互元素、音乐播放控制、视频弹窗播放以及…

Oracle表的别名不能用as,列的别名可以用as

在 Oracle 数据库中,‌表的别名‌和‌列的别名‌在使用 AS 关键字时确实有不同规则,以下是详细说明: 1. 表的别名(Table Alias)‌ ‌不支持 AS 关键字‌,直接跟在表名后即可。‌语法示例‌: S…

【SAP ME 44】在 HANA DB中报废SFC时的SHOP_ORDER表记录锁定

症状 SELECT…FROM SHOP_ORDER FOR UPDATE 在 SFC 报废期间持有锁,当同时调用数量较大时,可能会导致 HANA 数据库出现大量锁积压。这有时会导致因等待 HANA 数据库释放“选择更新”锁而导致报废 SFC 花费数分钟。 HANA 数据库日志中的示例: # begin PreparedStatement_ex…

Vscode开发Vue项目NodeJs启动报错处理

文章目录 背景一、npm启动报错报错信息定位原因处理方案第一步、下载安装高版本 二、node 无法识别报错信息处理方案定位原因第一步、检测环境变量第二步、重新开启界面 背景 使用Vscode开发Vue项目,使用到NodeJs,记录出现的问题及处理方案,…

破局遗留系统!AI自动化重构:从静态方法到Spring Bean注入实战

在当今快速发展的软件行业中,许多企业都面临着 Java 遗留系统的维护和升级难题。这些老旧系统往往采用了大量静态方法,随着业务的不断发展,其局限性日益凸显。而飞算 JavaAI 作为一款强大的 AI 工具,为 Java 遗留系统的重构提供了全新的解决方案,能够实现从静态方法到 Spring B…

2025妈妈杯数学建模C题完整分析论文(共36页)(含模型建立、可运行代码、数据)

2025 年第十五届 MathorCup 数学建模C题完整分析论文 目录 摘 要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1代码(仅供参考) 4.1.4问题1求解结果(仅…

【Python爬虫详解】第一篇:Python爬虫入门指南

什么是网络爬虫? 网络爬虫(Web Crawler)是一种自动获取网页内容的程序。它可以访问网站,抓取页面内容,并从中提取有价值的数据。在信息爆炸的时代,爬虫技术可以帮助我们高效地收集、整理和分析互联网上的海…

【JavaWeb后端开发02】SpringBootWeb + Https协议

课程内容: SpringBootWeb 入门 Http协议 SpringBootWeb案例 分层解耦 文章目录 1. SpringBootWeb入门1.1 概述1.2 入门程序1.2.1 需求1.2.2 开发步骤1.2.3 常见问题 1.3 入门解析 2. HTTP协议2.1 HTTP概述2.1.1 介绍2.1.2 特点 2.2 HTTP请求协议2.2.1 介绍2.2.2…

MATLAB 控制系统设计与仿真 - 37

范数鲁棒控制器的设计 鲁棒控制器的设计 根据双端子状态方程对象模型结构,控制器设计的目标是找到一个控制器K(s),它能保证闭环系统的范数限制在一个给定的小整数下,即 这时控制器的状态方程为: 其中X与Y分别为下面两个代数Riccati方程的解…

依赖冲突,缺失插件导致无法启动项目 强制安装命令(npm install --legacy-peer-deps)

小白终成大白 文章目录 小白终成大白前言总结 前言 运维工程师说搞一个自动化打包流程 在服务器装了hbuilder 找前端来启动项目 我没启动起来 … 启动报错 failed to load config from D:\zhuque-uniapp\vite.config.js 16:17:31.601 error when starting dev server: 16:17:3…

数据战略新范式:从中台沉淀到服务觉醒,SQL2API 如何重塑数据价值链条?

一、数据中台退烧:从 “战略神话” 到 “现实拷问” 曾几何时,数据中台被视为企业数字化转型的 “万能解药”,承载着统一数据资产、打破业务壁垒的厚望。然而,大量实践暴露出其固有缺陷:某零售企业投入 500 万元建设中…

警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动

由于使用阿里云进行部署测试,因而会对yum update进行操作,这两天更新了systemd-239-82.0.3.4.al8.2.x86_64,但存在报错,然后进行yum history undo和清空yum cache,但出现操作Linux命令行无效。具体来说,几个…

论文阅读:2023 ICLR Safe RLHF: Safe Reinforcement Learning from Human Feedback

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback 安全 RLHF:通过人类反馈进行安全强化学习 https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe…

android rom打包解包工具,Android ROM定制:boot.img、recovery解包打包

安卓boot.img和recovery.img解析与修改指南 安卓映像文件结构解析 大家都知道安卓的核心更换是在boot.img里面,那么如何在Windows下解开它呢?这里介绍一个实用的方法。 首先需要获取bootimg.exe工具,这个工具最初是为华为设备开发的&#…

cdp-(Chrome DevTools Protocol) browserscan检测原理逆向分析

https://www.browserscan.net/zh/bot-detection 首先,打开devtools后访问网址,检测结果网页显示红色Robot,标签插入位置,确定断点位置可以hook该方法,也可以使用插件等方式找到这个位置,本篇不讨论. Robot标签是通过insertBefore插入的. 再往上追栈可以发现一个32长度数组,里面…

PostgreSQL 通过 copy 命令导入几何数据 及 通过 CopyManager.copyIn() 导入几何数据

COPY命令介绍 copy是postgresql提供的一个专门用于快速导入导出数据的命令,通常用于从文件(TXT、CSV等)或标准输入输出中读取或写入数据。适合批量导入导出数据,速度快。 默认情况下,如果在处理过程中遇到错误,COPY将失败。 COPY只能用于表,不能用于视图!!! COPY…

常用的几种 Vue 父子组件传值方式

1. 父组件向子组件传值(props) 父组件代码:Parent.vue <template><div><h2>父组件</h2><Child :parent-msg="parentMsg" /></div> </template><script> import Child from ./Child.vue;export default {componen…

【1】云原生,kubernetes 与 Docker 的关系

Kubernetes&#xff1f;K8s&#xff1f; Kubernetes经常被写作K8s。其中的数字8替代了K和s中的8个字母——这一点倒是方便了发推&#xff0c;也方便了像我这样懒惰的人。 什么是云原生&#xff1f; 云原生&#xff1a; 它是一种构建和运行应用程序的方法&#xff0c;它包含&am…

Eureka搭建

1.注册中心server端 1.1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</…