三台服务器,一套流水线:如何实现无缝自动化部署?

目录

[一 Gitlab](#一 Gitlab)

[二 Jenkins](#二 Jenkins)

[三 maven](#三 maven)

[四 tomcat](#四 tomcat)

[五 使用流水线方式添加任务](#五 使用流水线方式添加任务)

[六 构建触发器的一些策略](#六 构建触发器的一些策略)


复制代码
SDLC (软件开发生命周期)
│
├─ 瀑布模型(传统)  → 固定流程
└─ 敏捷开发(现代) → 快速迭代
       │
       └─ DevOps(敏捷的延伸)
              │
              ├─ CI/CD(自动化流水线)
              │      │
              │      ├─ GitLab CI / Jenkins / GitHub Actions
              │
              ├─ 云原生(面向云的架构思想)
              │      │
              │      ├─ Docker(容器技术)
              │      ├─ Kubernetes(容器编排)
              │      └─ 微服务 / 服务网格
              │
              └─ 最终目标:快速、安全、稳定地发布软件

瀑布->敏捷:瀑布模型要求一次性把事情计划好,敏捷则强调边做边反馈边修正。

敏捷->devops:是借助持续集成/持续部署对开发测试运维协作方式的改进,是一种新体系。

devops->云原生:是借助Docker和k8s对部署架构的改进。

云原生通过 Docker、Kubernetes 和微服务等理念,将应用的运行和部署方式全面云化与自动化,让系统具备弹性、自愈、快速扩缩容、声明式运维等能力。

瀑布模型:需求 → 设计 → 开发 → 测试 → 上线 → 维护。

一步一步的实现,过程是线性的。

敏捷开发:部分交付,持续交付,持续反馈,持续改进,不断完善。

不断完善,可以及时反馈。

一 Gitlab

106服务器

GitLab 是一款开源的一体化 DevOps 平台 ,基于 Git 版本控制系统,为软件开发团队提供从代码托管、项目管理到持续集成 / 部署(CI/CD)、安全合规的全流程解决方案。以下从核心模块、架构、优势等维度详细介绍:

安装方式:

html 复制代码
Gitlab安装
1. 安装相关依赖
    yum -y install policycoreutils openssh-server openssh-clients postfix
2. 启动ssh服务&设置为开机启动
    systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
    systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表
    firewall-cmd --add-service=ssh --permanent
    firewall-cmd --add-service=http --permanent
    firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
5. 下载gitlab包,并且安装
    下载安装包(找合适的)
    https://mirrors.aliyun.com/gitlab-ce/yum/el7/
    安装:
    rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
6. 修改gitlab配置
    vi /etc/gitlab/gitlab.rb
    修改gitlab访问地址和端口,默认为80,我们改为82
    external_url 'http://192.168.100.106:82'
    nginx['listen_port'] = 82
7. 重载配置及启动gitlab
    gitlab-ctl reconfigure
    gitlab-ctl restart
8. 把端口添加到防火墙
    firewall-cmd --zone=public --add-port=82/tcp --permanent
    firewall-cmd --reload
启动成功后,看到以下修改管理员root密码的页面,修改密码后,然后登录即可

安装gitlab(基于docker环境)

html 复制代码
docker pull gitlab/gitlab-ce:latest

启动命令

java 复制代码
docker run -d --name gitlab --restart always -p 8929:80 -p 2224:22 -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab -e GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.100.106:8929'; gitlab_rails['gitlab_shell_ssh_port'] = 2224;" gitlab/gitlab-ce:latest

注释:

复制代码
  -v /srv/gitlab/config:/etc/gitlab \    # 配置挂载
  -v /srv/gitlab/logs:/var/log/gitlab \  # 日志挂载
  -v /srv/gitlab/data:/var/opt/gitlab \  # 数据挂载

登录展示:

这样我们的安装部署就完成了

首先我们先去创建组

创建结束再去添加项目

效果

添加用户

添加新用户

对应的人物角色

现在我们去组别当中给对应的人添加权限

项目集成

首先先创建本地仓库,然后管理远程

然后将gitlab当中仓库当中对应的http或者ssh的url复制过来

将代码提交

推送

这样就提交过来了

idea上传项目至gitlab_idea上传代码到gitlab-CSDN博客

版本控制

二 Jenkins

105服务器

接下来安装jenkins(基于docker环境)(这里可以自行选择,基于docker,需要将挂载部分的内容处理好,要不然有些文件数据日志等在删除容器时可能会出现丢失的情况)

拉取镜像

复制代码
# 拉取 Jenkins LTS 镜像(最新稳定版)
sudo docker pull jenkins/jenkins:lts

创建对应的挂载目录

XML 复制代码
# 创建数据存储目录
sudo mkdir -p /var/jenkins_home
# 赋予目录读写权限(避免容器内权限报错)
sudo chmod 777 /var/jenkins_home

启动(jenkins当中的数据都存储在。/var/jenkins_home/目录下)

XML 复制代码
docker run -d --name jenkins-lts -p 8081:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home --privileged=true jenkins/jenkins:lts

注释:

  • 如果不加 --privileged=truejenkins 用户没有权限读写宿主机的 root 目录,会报 "Permission denied(权限不足)",导致 Jenkins 启动失败。
  • -v /var/jenkins_home:/var/jenkins_home是将容器当中的jenkins_home进行挂载到本地的硬盘文件位置当中,避免出现容器删除而导致配置失效的问题,后续只需要继续挂载到这个地方还可以进行使用
  • 两个端口,8081是用于Web页面的访问,而50000是用于分布式构建通信

使用文档:

1首先进入对应的界面

2 缺失插件的安装

凭据管理:可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等、以便jenkins可以和这些第三方的应用进行交互。

如果没有这个插件的话需要去安装凭证管理的插件(我这里已经安装完成)

我们还需要在jenkins当中的插件当中去安装git的插件,同时还需要在对应的服务器当中安装Git工具

接下来我们去jenkins当中

3 新建任务

源码管理当中选择git

这个凭证如果说在创建凭据的时候初始化的为userName与password那么这个凭证在添加时就是对应的账号与密码,但是还有ssh/http/secret等方式

地址就是对应的项目的http或者ssh地址

4 现在去对应的配置权限,先将这个插件给安装

权限的一个整体的理解为,首先jenkins用户账号是最终权限的授予者,而对应,我们需要去设置不同的权限分组进行区分,比如说全局的权限,项目的权限,组别的权限都可以去自定义,从而实现灵活的设置权限分组。

接下来讲解一下ssh方式的凭证配置

那就是说如果想要去使用ssh的便携验证,首先需要在本地去生成一个公钥一个私钥,将公钥放在Gitlab等的配置项当中,将私钥保留在本地的ssh文件当中,拉取代码时私钥与公钥之间可以快速的校验。如果jenkins所处的服务器去gitlab所处的服务器拉代码需要一套,然后本地从gitlab上面拉代码也需要一套

接下来进行配置(jenkins与Gitlab之间)

将公钥放到对应的位置

对应的创建方式,连接gitlab

然后去全局安全配置

选择对应的Role-Based Strategy

选择对应的manageandassignroles

在管理用户当中去添加用户

全局角色与项目角色

三 maven

105服务器

首先先去对应的apache官网安装对应的tar包

然后放到/root/路径下

然后解压

然后移动

然后添加环境变量

vi /etc/profile添加对应的全局变量

再把仓库地址改改

2 接下来来到jenkins的全局工具配置,来添加对应的maven以及jdk

这里的话出现一个问题我是使用docker进行(将内部maven的settings给挂载到.m2/settings,可以把maven对应conf下的配置文件给粘过来或者指定挂载maven的位置,这里的话没有将本地仓库进行挂载,所以说目录当中没有因为我是使用jenkins 的)

现在前面进行目录挂载,数据挂载,日志挂载的好处就出来了

XML 复制代码
#首先先把docker的容器给停了
docker stop jenkins-lts
#然后把老容器给删了
docker rm jenkins-lts
#最后直接一手执行
docker run -d --name jenkins-lts -p 8081:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /usr/lib/jdk-17.0.1:/usr/lib/jdk-17.0.1 -v /opt/maven:/opt/maven -v /root/.m2/settings.xml:/root/.m2/settings.xml --privileged=true jenkins/jenkins:lts
#嘎巴就成功了

下面就配置成功了

接下来来系统配置

来这个全局属性的环境变量这里

添加对应的键值对

详细解释:

  • PATH的作用 :系统用来查找可执行程序(如javamvn)的路径列表,只有程序所在路径在PATH里,才能在任意目录下直接执行命令;
  • PATH+EXTRA的设计 :Jenkins 提供的 "追加式" 配置,既保留系统原有PATH(不影响其他命令的执行),又能新增 Maven 的bin目录(让mvn命令可被识别);
  • $M2_HOME/bin的含义$M2_HOME是你在 Jenkins 中配置的 Maven 根目录(如/opt/maven),bin目录下存放着mvn可执行文件,把它加入PATH+EXTRA后,Jenkins 就能在构建时直接执行mvn clean install等命令。

简单说,这个配置是Jenkins 与 Maven 集成的关键一步 ,没有它,Jenkins 会因找不到mvn命令而无法完成 Java 项目的构建。

对应的代码管理构建当中去添加构建步骤,添加shell脚本

四 tomcat

105服务器

依旧是下载对应的包然后解压移动位置

这样就访问成功了

现在为了远程访问,需要去配置tomcat的角色,但是我这里全都放在一个105了,要不然太多了,可能电脑跑不动了,先去userxml当中

账号密码就是

tomcat

tomcat

接下来重启

重启后点击

进入登录界面

登录的账号密码就是原先设置的user对应的属性,

username:tomcat

passwordtomcat

项目的存储位置

对应的工作空间

jenkins如果说需要远程部署,需要一个插件deploy to container Plugin

去构建后操作添加配置

这个Credentials当中的tomcat就是tomcat当中的账号与密码

url就是对应服务器的地址

现在我们来到tomcat的地址与端口,点击

现在就是这个项目的部署路径

总体概括从gitlab的代码管理,开发者借助这个gitlab代码仓库进行管理,借助idea进行集成,提交与上传,借助jenkins进行持续集成,持续部署,同时配置对应的maven与tomcat,最后借助tomcat服务器进行部署上线从而进行访问。整个流程涉及到许多的权限管控的部分,gitlab需要账号,jenkins需要账号同时还有对应的角色权限,以及tomcat也开启角色权限管控。

现在去看看持续集成的效果

先在本地修改代码,然后提交到后台去

显示版本修改了

再来到jenkins当中

直接点击构建即可

再刷新一下tomcat直接展示最终的效果

持续集成:

五 使用流水线方式添加任务

创建一个流水线项目

我们需要去写对应的拉取代码编译构建等步骤的脚本文件。

脚本语法不需要特地去进行学习

可以去生成

接下来到里面的片段生成器选择拉取代码,生成对应的脚本文件

将脚本填写

生成maven的脚本

填写

配置tomcat生成对应的脚本文件

使用项目根目录下的JEnkinsfile来进行读取

控制台输出

六 构建触发器的一些策略

相关推荐
heimeiyingwang12 小时前
【GitOps·入门篇】工具生态:ArgoCD、Flux、Jenkins X 对比选型
jenkins·flux·argocd·gitops
Jeanyia15 小时前
GitLab 配套 Git 常用命令
git·gitlab
极小狐20 小时前
极狐GitLab 补丁版本:19.2.1、19.1.3、19.0.5
网络·安全·gitlab·极狐gitlab·安全更新·补丁版本
骇客野人20 小时前
基于Nginx+Eureka+Apollo+Jenkins+SpringBoot Web系统分布式部署方案
nginx·eureka·jenkins
rustfs2 天前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab
中才实用2 天前
Jenkins自动化部署
运维·自动化·jenkins
郝亚军4 天前
gitlab常用命令
gitlab
童槿顏丶5 天前
Jenkins部署(Docker)
java·docker·jenkins
xixingzhe27 天前
Java 使用 GitLab4J 实现 WebHook
gitlab
童槿顏丶8 天前
GitLab部署到Linux
linux·运维·gitlab