当前位置: 首页 > news >正文

Gitlab SSH Jenkins Pipeline Supervisor部署

Gitlab SSH Jenkins Pipeline方式部署

准备搞一搞简单部署SpringBoot项目的一种方式,通过Gitlab+ssh +Jenkins Pipeline的方式,简单学习下。

环境准备

本地域名ip地址安装软件作用
server01192.168.110.110Gitlab代码托管
server02192.168.110.111Jenkins持续集成

虚拟机

静态IP

两台虚拟机设置了静态ip,防止老变更,设置了本地域名

静态IP,以192.168.110.111为例

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
IPADDR="192.168.110.111"
NETMASK="255.255.255.0"
GATEWAY="192.168.110.1"
DNS1="192.168.110.1"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="7db205e0-c8ad-4f4a-8375-c436cbbed3cf"
DEVICE="ens32"
ONBOOT="yes"

静态地址的ip可以自己配置,但是同一网段不能出现重复的ip,网关可以自己去宿主机看下网关的地址。

# 重启一下网络配置以生效
service network restart

本地域名

192.168.110.111为例

sudo hostnamectl set-hostname server02

在宿主机设置好域名映射,windows系统在C:\Windows\System32\drivers\etc\hosts文件中

192.168.110.110 server01
192.168.110.111 server02
  • Gitlab版本:12.3.9
  • Jenkins:2.503,依赖Java17版本
  • Git:2.41.0版本,最好把Git版本拉到2.xxx以上,否则可能出现不兼容的情况,拉取代码报错

安装Gitlab

server01机器上,直接在网上找个国内镜像加速的,速度下载,清华源Gitlab-ce(el7)

这里给个在线下载的地址,可以试试,成功率不高的话去网页下载好在整到虚拟机里面

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm

安装

# 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix# 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd# 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix# 开放ssh以及http服务,然后重新加载防火墙列表 若关闭防火墙,那么下面这三条命令不需要执行
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload# 开始安装命令
npm -ivh gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm

做一些配置,端口80若是已经占用了,可以更改一下,同时nginx监听的端口也要更改:

vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.110.110:82'
nginx['listen_port'] = 82
# 使配置生效
gitlab-ctl reconfigure# 重启
gitlab-ctl restart# 防火墙端口
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

命令执行完毕就安装完成并且配置好了,那么可以直接通过server01:82访问了,第一次进入的时候应该需要设置新密码的,我这里已经设置过了。

在这里插入图片描述

代码准备

这个随便搞个SpringBoot的项目都可以的,来个接口就行,然后把项目上传到server01的Gitlab上。

<properties><java.version>17</java.version>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

java

@RestController
public class HelloController {@RequestMapping("/hello")public String hello() {return "Hello World!";}}

Gitlab添加ssh

在这里插入图片描述

使用root用户生成公钥和私钥

ssh-keygen -t rsa

在这里插入图片描述

id_rsa:私钥文件

id_rsa.pub:公钥文件

把生成的公钥放在Gitlab中

以root账户登录->点击头像->Settings->SSH Keys,复制刚才id_rsa.pub文件的内容到这里,点击"Add Key"

在这里插入图片描述

Jenkins环境准备

安装2版本的Git

最好把Jenkins的那台服务器上的Git升级为2.xx版本,因为有过踩坑经验,但好像又有点概率性,升级之后就完全不报错了。

# 先安装源
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm# 安装git
yum install -y git

把项目传上来

在Gitlab中先将项目创建好…

在这里插入图片描述

安装

Jenkins的安装,可以用rpm包的方式,先到网上下载一个或者在线下载都可以,注意下啊,Java需要的版本是17,先安装好Java再来安装Jenkins,Jenkins依赖java环境,环境不兼容是安装不了滴。

# 提供一个下载的地址,下载不了的话就直接在页面上去下载装到虚拟机就行
wget https://mirrors.jenkins-ci.org/redhat/jenkins-2.503-1.1.noarch.rpm
# 安装一下
rpm -ivh jenkins-2.503-1.1.noarch.rpm

新版的Jenkins好像没有/etc/syscofig/jenkins这个文件了,启动的时候直接把这些配置文件放到systemctl管理的配置里面的,具体的配置地址如下:

vim /usr/lib/systemd/system/jenkins.service
# 用户
User=root
# 用户组
Group=root
# 改一下java的环境
Environment="JAVA_HOME=/usr/local/jdk/jdk-17.0.14"
# 改一下端口,不改也行
Environment="JENKINS_PORT=8888"
# 配置生效
systemctl daemon-reload# 重启jenkins
sudo systemctl restart jenkins

有防火墙关一下,不想关就把端口开一下。

firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
# 启动Jenkins即可
systemctl start jenkins# 有需要设置开机自启
systemc	enable jenkins

准备

在系统中将jdk,maven,git都下载安装完毕后,在Jenkins的插件管理中把maven和git的插件下载一下,然后把maven和git的地址在Jenkins的全局工具中配置下。

在这里插入图片描述

jdk配置

在这里插入图片描述

maven配置

在这里插入图片描述

git配置

在这里插入图片描述

把ssh在Jenkins中配置一下。

在这里插入图片描述

Jenkins Pipeline

将Pipeline插件在Jenkins中安装一下。

在这里插入图片描述

创建一个Pipeline的项目

在这里插入图片描述

流水线项目灵活度比较高,比较推荐使用。

把相关的pipeline脚本完善下

pipeline {agent anystages {stage('拉取代码') {steps {checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ssh-auth', url: 'git@192.168.110.110:root/test110.git']])}}stage('编译构建') {steps {sh 'mvn clean package'}}stage('执行部署') {steps {sh 'cp target/test-0.0.1-SNAPSHOT.jar /root/demo/demo.jar'sh 'supervisorctl restart demo'}}}
}
  • stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage

  • stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段

  • steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内

脚本中共写了三个stage步骤,分别将拉代码,编译,部署都进行了流水线化。

我这里直接用linux中一个进程管理工具将项目给进行管理了,个人总结的经验发现:使用nohup java -jar ...的失败率太高了,总是莫名其妙卡住或者报错…

Supervisor

做一下supervisor的配置,详细配置可以参考我的博客:linux进程管理工具supervisor详细配置。

这里简单做下配置:

yum install -y epel-release 
yum install -y supervisor
vim /etc/supervisord.conf
[include] files = supervisord.d/*.conf

/etc/supervisord.d/中创建一个demo.conf的文件,然后配置如下:

[program:demo]
command=java -jar /root/demo/demo.jar
stdout_logfile=/root/demo/logfile.log
autostart=true
autorestart=false
startsecs=5
stopasgroup=true
killasgroup=true
# 启动主程序,如果已经启动了,杀掉主进程再执行这个命令
supervisord -c /etc/supervisord.conf# 开机自启动
systemctl enable supervisord

相关文章:

  • 大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略
  • 深度为16,位宽8bit的单端口SRAM——学习记录
  • 全网通emotn ui桌面免费吗?如何开机自启动
  • leetcode:3210. 找出加密后的字符串(python3解法)
  • 淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战
  • SnailJob:分布式环境设计的任务调度与重试平台!
  • Centos/RedHat 7.x服务器挂载ISCSI存储示例(无多路径非LVM)
  • opencv腐蚀的操作过程
  • DeepSeek高阶玩法教程:从入门到精通的实战案例
  • 晶晨线刷工具下载及易错点说明:Key文件配置错误/mac剩余数为0解决方法
  • 鸿蒙系统开发状态更新字段区别对比
  • SAP S4HANA embedded analytics
  • 【QT】 QT定时器的使用
  • RPCRT4!OsfCreateRpcAddress函数分析之AssociationBucketMutexMemory数组的填充
  • Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行
  • C#核心学习(三)常见的泛型数据结构类(1)List和Dictionary
  • DDoS(分布式拒绝服务)攻击
  • RNN - 循环神经网络(概念介绍)
  • 通过额外的磁盘挂载进行扩容(win与linux空间共享)——linux最多也就推荐100G
  • ZEP: 一种用于智能体记忆的时序知识图谱架构
  • 网警查处编造传播“登顶泰山最高可得3万奖金”网络谣言者
  • 习近平主持召开部分省区市“十五五”时期经济社会发展座谈会
  • 郭继孚被撤销全国政协委员资格,此前为北京交通发展研究院长
  • 深入贯彻中央八项规定精神学习教育中央指导组派驻地方和单位名单公布
  • 专访|首夺天元头衔创生涯历史,王星昊打算一步一步慢慢来
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日