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

目录

[一 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来进行读取

控制台输出

六 构建触发器的一些策略

相关推荐
...对方正在输入......14 小时前
Elasticsearch集群部署实战指南
elasticsearch·jenkins
西部森林牧歌15 小时前
Arbess从基础到高阶(14) - 使用Arbess+GitLab+SonarQube实现代码扫描完成后自动化部署
ci/cd·gitlab·sonarqube·arbess·tiklab devops
程序员潇潇18 小时前
Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!
运维·自动化测试·软件测试·功能测试·程序人生·职场和发展·jenkins
4***V2021 天前
GitLab Pages配置
git·gitlab·github
ζั͡山 ั͡有扶苏 ั͡✾1 天前
EFK 日志系统搭建完整教程
运维·jenkins·kibana·es·filebeat
sulikey1 天前
从入门到精通:如何自己编写高质量的 .gitignore(面向工程实践)
git·gitee·编辑器·gitlab·github·gitignore·gitattributes
小晶晶京京2 天前
day62-gitlab和JenKins
运维·gitlab·jenkins
奔跑吧邓邓子2 天前
Jenkins自动化持续集成:从入门到实战
ci/cd·自动化·实战·jenkins·自动化持续集成
e***0962 天前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins