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

news2024/12/24 21:02:02

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.coloradmin.cn/o/1616048.html

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

相关文章

物联网配网工具多元化助力腾飞——智能连接,畅享未来

随着物联网技术的迅猛发展&#xff0c;智能插座、蓝牙网关作为其中常见的智能物联设备&#xff0c;无论是功能还是外观都有很大的改进&#xff0c;在智能化越来越普遍的情况下&#xff0c;它们的应用场景也在不断拓宽。对于智能设备而言&#xff0c;配网方式的选择对于设备的成…

vscode ssh远程连接服务器,一直正在下载vscode服务器的解决办法

前言 为方便描述&#xff0c;在本教程中&#xff0c;发起远程连接的叫“主机”&#xff0c;被远程连接的叫“服务器”。 正文 如果主机是首次用vscode远程连接服务器&#xff0c;会在服务器上自动下载vscode服务器&#xff0c;但有时候因为网络问题&#xff0c;会卡在&#xff…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C&#xff0c;一个CPU去执行他们&#xff0c;有几种方式 1、一个cpu按顺序执行ABC&#xff0c;这就是串行…

ThingsBoard教程(二十九):详细讲解在tb平台下 http协议下的客户端rpc,服务的rpc的使用

客户端rpc 先来说一下简单的客户端rpc, 客户端发起rpc请求,只需要使用post方法调用该接口即可以 http://host:port/api/v1/$ACCESS_TOKEN/rpc请求路径中间的参数 ACCESS_TOKEN 必须是设备的访问令牌。 请求携带的参数如下,二个参数method和params {"method": …

创建Maven项目的时候让选择maven模板

创建Maven项目的时候让选择maven模板 心得 工欲利其事 必先利其器。如果你想要干成一件事 那么必须先要精通对应的工具使用。之前我不太注重工具 我觉得只要代码写的好就可以了 但是当我们了解了产品经理的一些思想之后&#xff0c;我才明白一个好的产品是可以给用户提供多大…

Vue学习:webpack-dev-server和nginx问答

正向代理和反向代理的概念 正向代理和反向代理的概念如下&#xff1a; 正向代理。是一个位于客户端和原始服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff08;原始服务器&#xff09;&#xff0c;然后代理向…

苹果电脑装虚拟机好用吗 苹果电脑装虚拟机要钱吗 Parallels对mac的损害 Parallels占用多大空间 PD19

在当今数字化的时代&#xff0c;人们对电脑系统跨设备互联的需求越来越高。作为拥有广泛用户群体的苹果电脑&#xff0c;许多用户会有在Mac系统中运行其他操作系统的需求。在这种情况下&#xff0c;安装虚拟机是一个较好的解决方案。那么接下来就给大家介绍苹果电脑装虚拟机好用…

对接支付宝支付

前言 这里讨论的主要是一个验签出错的问题,至于具体的对接流程并不复杂,直接找官网的文档就行了 问题表现 后台拉起支付后要返回一个form表单给前端,然后前端说报了这个错,于是进行一系列排查 猜测1 很明显的就会怀疑支付宝的公钥或者私钥出了问题才引起这个问题,但是对比了以…

苍穹外卖day10(2)WebSocket、来单提醒、客户催单

文章目录 前言一、WebSocket1. 概述2. HTTP协议和WebSocket协议对比3. 实现步骤 二、来单提醒1. 业务规则2. 接口设计3. 代码实现 三、客户催单1. 业务规则2. 接口设计3. 代码实现 前言 websocket支持双向通信&#xff0c;通常用于数据实时更新。本项目中用于来单提醒和客户催…

在 Linux 上把 Vim 配置为默认编辑器

目录 ⛳️推荐 在 Linux 命令行中编辑 将 Vim 设置为其他程序的默认值 在 Alpine 中编辑电子邮件 总结 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 我使用 Linux 大概有…

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

Linux查看僵尸进程

1、查看系统是否有僵尸进程 使用Top命令查找&#xff0c;当zombie前的数量不为0时&#xff0c;即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |grep -e ‘^[Zz]’定位僵尸进程以及该僵尸进程的父进程。 3、杀死僵尸进程 使用Kill -…

深入了解直播美颜工具与视频美颜SDK的实现与优化策略

今天&#xff0c;小编将为大家详解视频美颜SDK技术的视线方案与优化策略。 一、美颜工具的实现原理 利用特征提取算法提取人脸的各种特征&#xff0c;如皮肤色调、眼睛大小等。接下来&#xff0c;根据用户设定的美颜参数&#xff0c;对提取的特征进行修改。最后&#xff0c;将…

Unet网络架构讲解(从零到一,逐行编写并重点讲解数据维度变化)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

【bug】使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理&#xff08;使用bisenetV2&#xff09; 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader{batch_size: 1, num_workers: 4}, val_cfg{type: ValLoop}, …

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库&#xff0c;为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机)&#xff0c;考滤到要300G空间&#xff0c;原来的盘空间不够了,就是给虚拟机加了磁盘&#xff0c;Mysql 8.0.26社区版安装路径没得选择&#xff0c;默认就装在C&a…

OpenHarmony开发实例:【 待办事项TodoList】

简介 TodoList应用是基于OpenHarmony SDK开发的安装在润和HiSpark Taurus AI Camera(Hi3516d)开发板标准系统上的应用&#xff1b;应用主要功能是以列表的形式&#xff0c;展示需要完成的日程&#xff1b;通过本demo可以学习到 JS UI 框架List使用&#xff1b; 运行效果 样例…

记一次 Vscode + Latex 正向/反向搜索忽然失效

遥望大半个月前&#xff0c;完成论文撰写后&#xff0c;这些天虽然多次打开项目&#xff0c;但我真的一个字都没动过&#xff0c;今天想着开始着手修改一下&#xff0c;打开项目发现正向/反向搜索忽然失效了&#xff0c;感觉浑身有蚂蚁在爬&#xff0c;思索再三后找到问题&…

端口被占用的解决方案汇总

端口被占用的解决方案汇总 【一】windows系统端口被占用【二】Linux系统端口被占用【三】Linux的ps命令查找&#xff08;1&#xff09;ps命令常用的方式有三种&#xff08;2&#xff09;ps -ef |grep 8080 【一】windows系统端口被占用 &#xff08;1&#xff09;键盘上按住Wi…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 多线程进阶 1.常见的锁策略 我们需要了解的是,我们使用是锁,在加锁 / 解锁…