ubuntu系统安装配置gitlab+Jenkins+发布持续集成持续部署保姆级教程。

1、服务器环境

名称                              系统                                   IP                              备注

gitlab               ubuntu20.04.2图形化          192.168.26.130        要求有6G的内存

Jenkins           Ubuntu20.04.2图形化          192.168.26.110        没有硬性要求   

测试服务器     Ubuntu20.04.2图形化          192.168.26.129        没有硬性要求

2、做时间同步(所有服务器都要执行)

timedatectl set-timezone "Asia/Shanghai"       #时区改为上海

ntpdate "ntp.aliyun.com"                                  #更正时间

出现下图错误 说明本机没有安装ntpdate 

解决办法

sudo apt install ntpdate

3、安装gitlab极狐

sudo apt-get update                          #更新系统的软件包列表和版本信息

sudo apt-get install -y curl openssh-server ca-certificates tzdata perl             #下载依赖

sudo systemctl status ssh                       #查看ssh是否在运行

sudo systemctl start ssh                          #启动ssh

curl -fsSL https://get.gitlab.cn | /bin/bash                #配置极狐gitlab软件源镜像

sudo EXTERNAL_URL="http://192.168.193.130" apt-get install gitlab-jh     #开始安装gitlab

注:URL后面的参数可以是本机的IP,也可以为域名,如果设置域名需要确保域名解析到本机的IP即可。

EXTERNAL_URL 中配置的地址来访问安装成功的极狐GitLab 实例。用户名默认为 root 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中, 查看随机密码并使用 root 用户名登录。

注意:出于安全原因,24 小时后,/etc/gitlab/initial_root_password 会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。

gitlab常用命令

gitlab-ctl start # 启动所有gitlab组件

gitlab-ctl stop # 停止所有gitlab组件

gitlab-ctl restart # 重启所有gitlab组件

gitlab-ctl status # 查看服务状态

gitlab-ctl reconfigure # 启动服务

vim /etc/gitlab/gitlab.rb # 修改默认的配置文件

gitlab-ctl tail # 查看日志

4、登陆web页面查看

输入本机IP进行登陆

注:如果出现502错误 可以等一会再刷新看看 

默认用户是root

密码我们可以在/etc/gitlab/initial_root_password文件中进行查看

我们登陆上后先改密码

修改完成后我们再次登陆

5、将gitlab页面设置为中文

登陆gitlab页面

跟着图上标的步骤来

把页面拉到下面找到 Localization  选项

选择中文简体

在页面的最下面选择保存更改

在回到主页就可以看到已设置为中文

6、新建项目

新建项目

选择创建空白项目

7、使用命令行的方式向gitlab推送代码

 git branch -a                      #查看分支的命令

git status                           #查看当前工作目录的状态

找一个文件上传到你目录下 我的是在/root 目录下

  1. #设置用户名、邮箱为gitlab上设置的邮箱

  2. git config --global user.name "yuansui@2527.com"

  3. git config --global user.email "yuansui@2527.com"

  4. git config --global --list           #查看邮箱

#然后输入上面保存的地址

git clone http://192.168.193.130/root/java-project.git

git add .                    #把目录下的所有文件上传到git

git commit -m "你的描述"                #提交信息格式

git commit -m "测试"

git push <链接(orgin是别名)> <本地仓库>:<远程分支>

git push origin master

然后我们在浏览器可以看到下面的消息

我们上面操作推送代码的时候选择的的maser分支所以这里选择maser分支查看

下图可以看出我们推送的文件


1、Jenkins服务器安装部署

1、安装jdk17

sudo apt update                                            #更新软件包

sudo apt install openjdk-17-jdk                       # 下载jdk17

java -version                                                 #查看安装的 Java 版本信息

2、在Jenkins服务器安装git

sudo apt-get install git

echo $PATH                       #检查 PATH 变量

vim .bashrc      或者是 vim .bash_profile         #打开文件配置变量

export PATH=/usr/bin/git:$PATH                      #在文件尾部添加此变量

注意 文件路径 通常是 /usr/bin/git 或 /usr/local/bin/git

source ~/.bashrc         或者是 source ~/.bash_profile               #使命令生效

2、在Jenkins官网进行下载

Jenkins

下载Jenkins的war包到本地

将我们下载的war包传输到服务器内

启动我们的war包

java -jar jenkins.war                             #启动war包

Jenkins默认的端口是8080如果你需要指定端口的话可以使用--httpPort=选项 

java -jar jenkins.war --httpPort=8888      #启动war包并指定端口

如果启动时出现下面这种错误

解决办法

将jdk1.8升级到jdk11 错误显示最少需要jdk11

sudo apt install openjdk-11-jdk

将下图初始码复制下来

然后在网页访问本机的IP+8080端口 将上图保存的初始码粘贴到下图

创建你的管理员用户密码

3、在Jenkins服务器安装maven

sudo apt install maven                     

配置环境变量

vim .bashrc  (或 ~/.bash_profile~/.profile,取决于你使用的是哪个shell)

在文件尾部添加下行内容

export PATH=$PATH:/usr/local/maven/bin

source ~/.bashrc                       #使修改生效

mvn -v                                       #查看版本信息


2、测试服务器安装

apt install openjdk-8-jdk                   #安装java环境jdk1.8

sudo systemctl status ssh                       #查看ssh是否启动

sudo apt install -y openssh-server           #如果没安装用此命令安装

查看本机IP


3、使用Jenkins

进入Jenkins页面我们先去安装插件

安装maven

安装publish


4、Jenkins新建item

构建maven项目

源码管理设置

在gitlab上查看地址

将上图获得的地址填写在下图 

Branches to bulid 配置 根据项目分支情况进行填写

Build 配置

跳转到页面找到最下面的新建maven

maven按照配置

登陆我们gitlab的页面查看项目中我们pom.xml文件的路径

Build 配置

我们再次打开一个新的Jenkins页面

找到 Publish over SSH 选项 添加后端发布服务器信息

填写信息然后选择高级继续填写信息

然后返回我们的配置 添加后端服务器

注:如果上图的路径不知道可以按照下图查看

构建一下看是否能成功


如果你的出现下图报错

解决办法

sudo apt install -y default-jdk


在测试服查看是否有文件

我们构建的时候看输出的内容

解决办法

再次进行编译查看  通过下图我们可以看到我们的文件已经传输完成

我们在测试服务器进行查看

因为我的虚拟机是图形化的所以文件路径和你们的应该有所不同

你们的话可以直接在家目录下有root目录

如果你感觉路径太长 可以按照下图进行更改

然后我们将服务器的文件删除

再次跑一下任务

然后再次进入测试服务器进行查看 通过下图我们可以看出更简单了

接下来我们让它传输完成后自动将jar包启动起来

再次跑一下服务然后在服务器查看


5、Jenkins配置脚本

我们上面的配置可以实现文件传输后在后端服务器自动启动jar包(服务),但是有一个问题就是我们如果已经启动运行这一个jar包(一个服务),当我们在Jenkins跑服务的时候就无法启动新的jar包,端口会冲突,所以为了更加方便我们工作,我们可以写一个脚本来实现将老的jar包(服务)删除或者移动到指定文件夹,将老的服务停止,来释放端口,从而让我们新的jar包(服务)启动。

按照下图进行配置  为文件传输前的操作

这里我们先写好脚本的路径以及名字 下面我们在服务器创建脚本文件写脚本

注:脚本的服务器是我们发布服务器的路径,脚本也是在发布服务器上的

6、登陆到测试服务器写脚本

注:脚本的路径和上面我们写的路径必须要一样

vim /root/sy.sh

这是一个简单的shell脚本有需求可自己按照需求自己写

#!/bin/bash

# 删除历史数据
rm -rf /home/sy/data/my.*.jar

appname=$1

# 获取正在运行的jar包pid
pid=$(ps -ef | grep 'my' | grep 'java -jar' | awk '{print$2}')

# 如果pid为空,提示一下,否则,执行kill命令
if [ -z "$pid" ]
then
        echo "$appname 未启动"
else
        kill -9 $pid
        echo "$appname 正在停止...."
fi

# 等待一段时间,确保进程已经停止
sleep 5

# 再次检查进程是否已经停止
if ps -p $pid > /dev/null
then
        echo "$appname 停止失败"
else
        echo "$appname 已成功停止"
fi
 

7、回到Jenkins继续配置

保存后我们的配置也就完成了。

注:上面的配置可以提交代码后我们进行合并,就会自动部署更新代码也就是我们的jar包

就是说我们将新的代码提交到代码仓库,然后选择合并,在跑一下代码就可以自动将代码达成jar包自动传输到我们的服务器,脚本会自动将我们旧的jar包停止,将新的jar包启动。

但是需要我们手动的去合并和跑一下服务:下图就是跑服务  这是大多数公司常用的配置。




4、拓展(不建议配置使用)

如果你想提交代码后不用再手动去合并和跑服务可以继续按下面的操作进行配置

2、安装插件

3、打开插件的网址查看说明

Build Authorization Token Root | Jenkins pluginicon-default.png?t=N7T8https://plugins.jenkins.io/build-token-root/

4、打开gitlab进行配置

选择我们的项目

注意这一步路径别写错了

http://192.168.26.110:8080/buildByToken/build?job=first&token=112233

说明:

http://192.168.26.110:8080/                 #是你Jenkins的访问路径

buildByToken/build?job=first                #是你Jenkins上的Item项目名称

&token=112233                                    #是你项目设置的身份令牌

触发事件按你们自己需求来

5、报错解决办法

按照第5步操作完成后然后再按照第4步重新添加一下webhooks就可以了


以上配置完成了,但是不建议使用第四步扩展,这样会消耗更多的资源,而且每次提交代码都要构建一次服务 并不合理,同样也是需要手动合并才行。

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

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

相关文章

Pytorch下张量的形状操作(详细)

目录 一、基本操作函数 二、分类&#xff1a;维度改变&#xff0c;张量变形&#xff0c;维度重排 2.1维度改变 2.2张量变形 2.3维度重排 三、实例 一、基本操作函数 在PyTorch中&#xff0c;对张量的形状进行操作是常见的需求&#xff0c;因为它允许我们重新组织、选择和…

大模型训练及推理【硬件选型指南】及 GPU 通识

我们在做大模型应用部署时&#xff08;如训练、微调、RAG&#xff09;&#xff0c;往往需要在前期就分析好硬件选型指标&#xff0c;或者我们给客户报方案之前&#xff0c;可能你已经有了一个方案&#xff0c;但是由于实践经验缺乏&#xff0c;不知道在硬件上该如何评估并上报。…

CTF练习-BUUCTF(1~25)

文章目录 Crypto题目1 一眼就解密题目解题思路flag 题目2 md5题目解题思路flag 题目3 Url编码题目解题思路flag 题目4 看我回旋踢题目解题思路1解题思路2flag 题目5 摩丝题目解题思路flag 题目6 passwd题目解题思路flag 题目7 变异凯撒题目解题思路flag 题目8 Quoted-printable…

AJAX——封装_简易axios

1.简易axios_获取身份列表 需求&#xff1a;基于Promise XHR 封装 myAxios函数&#xff0c;获取省份列表展示 步骤&#xff1a; 1.定义 myAxios函数&#xff0c;接收配置对象&#xff0c;返回Promise对象 2.发起XHR请求&#xff0c;默认请求方法为GET 3.调用成功/失败的处…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

WPF2 样式布局

样式布局 WPF中的各类控件元素, 都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 等等。 而样式则是组织和重用以上的重要工具。…

Docker基础+虚拟化概念

目录 一、虚拟化简介 1、虚拟化概述 2、cpu的时间分片&#xff08;cpu虚拟化&#xff09; 3、cpu虚拟化性性能瓶颈 4、虚拟化工作 4.1虚拟机工作原理 4.2两大核心组件:QEMU、KVM 4.2.1QEMU&#xff1a; 4.2.2KVM&#xff1a; 5、虚拟化类型 ①全虚拟化&#xff1a; …

国内开通chatgpt plus会员方法

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先&#xff08;leader&#xff09;地位。 其LCAP产品是Microsoft Power Apps&#xff0c;扩展了AI Builder、Dataverse、Power Automate和Power Pages&#xff0c;这些都包…

Vue3 Vite配置环境变量

Vue3 Vite配置环境变量 相关文档配置.env文件vite.config.jspackage.json 使用 相关文档 Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/环境变量和模式&#xff1a;https://cn.vitejs.dev/guide/env-and-mode.html#env-file在配置中使用环境变量&#xff1a;https://c…

SCADA系统通过巨控GRM模块实现OPC协议远程监控PLC

SCADA系统和PLC不在同一个地方&#xff0c;需要远程监控和控制PLC&#xff0c;可以通过巨控GRM模块来实现&#xff0c;通过OPC协议转巨控服务器远程读写PLC寄存器&#xff0c;从而完成远程监控PLC。 要实现SCAKDA系统远程监控PLC&#xff0c;关键是要实现SKADA能通过互联网访问…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中&#xff0c;庞大的插件市场提供了丰富多样的扩展功能&#xff0c;以增强编码体验和效率。然而&#xff0c;如果你安装了很多插件&#xff0c;就可能会导致&#xff1a; 性能下降&#xff1a;过多的插件可能导致 VS Code 的启动速度变慢&#xff0c;特别是在启动或…

[2021最新]大数据平台CDH存储组件kudu之启用HA高可用(添加多个master)

今天在做kudu高可用的时候没有参考官网&#xff0c;直接按照常规方式&#xff08;添加角色—>编辑属性—>启动&#xff09;结果发现报错&#xff1f;然后参考了一下文档之后发现这玩意儿还有点玄学&#xff0c;做一下记录。 1.添加两个master。kudu master有leader和foll…

用云手机运营TikTok有什么好处?

在数字化浪潮的推动下&#xff0c;社交媒体平台正重塑商业推广与品牌建设的面貌。TikTok&#xff0c;这款全球热门的短视频应用&#xff0c;已经吸引了亿万用户的瞩目。对于出海电商和品牌推广而言&#xff0c;借助云手机运营TikTok&#xff0c;能够解锁更多潜在可能&#xff0…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包&#xff1a; 安装jdk 安装步骤&#xff1a; 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中&#xff0c;解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…

【MySQL | 第六篇】数据库三大范式

文章目录 6.数据库设计三大范式6.1第一范式6.2第二范式6.3第三范式6.4反范式设计 6.数据库设计三大范式 6.1第一范式 第一范式&#xff08;1NF&#xff09;&#xff1a;确保每列的原子性(强调的是列的原子性&#xff0c;即列不能够再分成其他几列)。实际上&#xff0c;第一范式…

react学习(一)之初始化一个react项目

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件&#xf…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样&#xff0c;可以在配置路由的时候&#xff0c;定义路由的元信息(附加信息)&#xff1f;答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息&#xff0c;然后通过useRouteLoaderData 钩子…

虚拟机扩容方法

概述 我的虚拟机开始的内存是40G,接下来要扩成60GB 扩容步骤 步骤1 步骤2 步骤3 修改扩容后的磁盘大小&#xff0c;修改后的值只可以比原来的大&#xff0c;修改完成后点击扩展&#xff0c;等待扩展完成 步骤4 虽然外面扩展成功&#xff0c;但是新增的磁盘空间虚拟机内部还…

GHO文件安装到Vmware的两种姿势

1、使用 Ghost11.5.1.2269 将gho转换为vmdk文件(虚拟机硬盘)&#xff0c;Vmware新建虚拟机自定义配置&#xff0c;然后添加已有的虚拟硬盘文件。 注意ghost的版本&#xff0c;如果你是用Ghost11.5备份的gho文件&#xff0c;再用Ghost12把gho文件转换为vmdk&#xff0c;则vmdk文…