就业班 第三阶段(CICD) 2401--5.15 day2 自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布

**什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问;
**什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本,逐步扩大影响范围,最终达到全部更新的发布方式 ;

灰度发布与平滑发布其实是关联的。当服务器的数量只有一台的时候,不存在灰度发布,一旦发布了就是所有用户都更新了,
所以这个时候只有平滑发布。当服务器数量大于一台的时候,只要每台服务器都能达到平滑发布的方式,然后设定好需要
发布的服务器占比数量,就可以实现灰度发布了。

单台服务器的平滑发布模式:
单机状态下,应用的持续服务主要依靠Nginx的负载均衡及自动切换功能;
为了能够切换应用,需要在服务器中创建两个相同的独立应用,分配两个不同的端口,
例如:app1,端口801; app2,端口802;
在Nginx中,将app1,app2作为负载均衡加载:

    upstream myapp{server 127.0.0.1:801; //app1server 127.0.0.1:802; //app2}然后设置代理超时为1秒,以便在某个应用停止时及时切换到另一个应用:
server {listen 80;server_name localhost;location /{proxy_pass http://myapp;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout       1;proxy_read_timeout          1;proxy_send_timeout          1;}
}以上内容写在单独的配置文件中:/vhost/pub/pub_app.conf在nginx.conf里包含进去:include /vhost/*.conf;

​ 现在系统会均衡地分配用户访问app1与app2。
​ 接下来我们进行平滑发布,我们先把app1停止,然后将新版本发布到app1中:

    步骤1: 准备发布app1配置文件新做一个配置文件 pub_app1_down.conf,内容中把app1停止掉:upstream myapp{server 127.0.0.1:801 down; //app1server 127.0.0.1:802; //app2}将这个文件内容覆盖掉在原有的pub_app.confcp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.conf步骤2:停止app1应用平滑重新加载一下nginx: service nginx reload或者:/usr/local/nginx/sbin/nginx -s reload此时所有的请求都转到了app2了;步骤3:更新app1现在可以通过各种方式来更新应用了,例如:压缩包方式:wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tarunzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar其中:-o:不提示的情况下覆盖文件;-d:指定解压目录步骤3.5 内部测试如果需要的话,可以在这一步对app1进行内部测试,以确保应用的正确性;步骤4:准备发布app2配置文件;此时app1已经是最新版本的文件了,可以切换到app1来对外,创建一个新的nginx配置文件:pub_app2_down.conf,设置为app1对外,app2停止即可:upstream myapp{server 127.0.0.1:801; //app1server 127.0.0.1:802 down; //app2}将这个文件内容覆盖掉在原有的pub_app.confcp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf步骤5:切换到app1新版本应用 平滑重新一下nginx: service nginx reload或者:/usr/local/nginx/sbin/nginx -s reload此时所有的请求都转到了app1了,新版本开始运行;步骤6:更新app2与第3步一样,解压就可以了,这里可以省去下载过程unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar步骤7:恢复app1,app2同时对外:cp -f /vhost/pub/pub_app.conf /vhost/pub_app.conf平滑重新一下nginx: service nginx reload或者:/usr/local/nginx/sbin/nginx -s reload至此,整个应用都已经更新。将各步骤中的脚本汇总一下:[pub.sh]#============ 平滑发布 v1.0 ===============#step 1cp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.conf#step 2service nginx reload#step 3wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tarunzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar#step 4cp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf#step 5service nginx reload#step 6unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar#step 7cp -f /vhost/pub/pub_app.conf /vhost/pub_app.confservice nginx reload#============ 平滑发布 v1.0  ===============    备注:也可以充分利用nginx的宕机检测,省去步骤1,2,4,5,7;简化后的脚本如下:[pub_mini.sh]#======== 简化版脚本 =============wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tarunzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tarunzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar#========= over ===========

多台服务器平滑发布模式:
有了单台平滑发布模式的基础,多台服务器就简单了。
每台服务器当作应用进行发布就可以了,由于nginx有宕机自动检测功能,
只需要在每台服务器上先停止发布,然后更新文件,再启动就可以了;
如果选择部分的服务器进行更新,那就是灰度了。

二、介绍 CI / CD

在本文档中,我们将概述持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍。

1、为什么要 CI / CD 方法简介

软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。

它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码的机会。

这种方法有三种主要方法,每种方法都根据最适合您的策略进行应用。 Devops

持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。

持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境、生成环境。

持续发布(Continuous Delivery, CD): 将最终产品发布到生成环境、给用户使用。

img

1、持续集成

考虑一个应用程序,其代码存储在GitLab中的Git存储库中。开发人员每天多次推送代码更改。对于每次推送到存储库,您都可以创建一组脚本来自动构建和测试应用程序,从而减少向应用程序引入错误的可能性。

这种做法被称为持续整合 ; 对于提交给应用程序的每个更改 - 甚至是开发分支 - 它都是自动且连续地构建和测试的,确保所引入的更改通过您为应用程序建立的所有测试,指南和代码合规性标准。

GitLab本身就是使用持续集成作为软件开发方法的一个例子。对于项目的每次推送,都会有一组脚本来检查代码。

2、持续交付

持续交付是持续集成的一个步骤。您的应用程序不仅在推送到代码库的每个代码更改时都构建和测试,而且,作为一个额外的步骤,它也会连续部署,尽管部署是手动触发的。

此方法可确保自动检查代码,但需要人工干预才能手动并策略性地触发更改的部署。

3、持续部署

持续部署 也是持续集成的又一步,类似于持续交付。不同之处在于,您不必手动部署应用程序,而是将其设置为自动部署。完全不需要人工干预就可以部署您的应用程序。

2、GitLab CI / CD简介

GitLab CI / CD是GitLab内置的强大工具,允许您将所有连续方法(持续集成,交付和部署)应用于您的软件,而无需第三方应用程序或集成。

3、GitLab CI / CD 的工作原理

要使用GitLab CI / CD,您只需要一个托管在Git存储库中的应用程序代码库,并在一个名为的文件中指定构建,测试和部署脚本,该文件.gitlab-ci.yml位于存储库的根路径中。

在此文件中,您可以定义要运行的脚本,定义包含和缓存依赖项,选择要按顺序运行的命令以及要并行运行的命令,定义要部署应用程序的位置,以及指定是否将要自动运行脚本或手动触发任何脚本。熟悉GitLab CI / CD后,您可以在配置文件中添加更多高级步骤。

要向该文件添加脚本,您需要按照适合您的应用程序的顺序组织它们,并且这些脚本符合您希望执行的测试。要想象可视化过程,请假设您添加到配置文件中的所有脚本与您在计算机终端上运行的命令相同。

.gitlab-ci.yml配置文件添加到存储库后,GitLab将检测到它并使用名为GitLab Runner的工具运行脚本,该工具与终端类似。

脚本被分组到作业中,它们一起组成一个管道.gitlab-ci.yml文件的极简主义示例可以包含:

before_script:- apt-get install rubygems ruby-dev -yrun-test:script:- ruby --version

before_script属性将在运行任何内容之前为您的应用程序安装依赖项,并且调用 的 作业run-test将打印当前系统的Ruby版本。它们都构成了在每次推送到存储库的任何分支时触发的管道

GitLab CI / CD不仅可以执行您设置的作业,还可以显示执行过程中发生的情况,如您在终端中看到的那样:

工作运行

您可以为应用创建策略,GitLab会根据您定义的内容为您运行管道。您的管道状态也由GitLab显示:

管道状态

最后,如果出现任何问题,您可以轻松 回滚所有更改:

回滚按钮

4、基本CI / CD工作流程

这是GitLab CI / CD如何适用于通用开发工作流程的一个非常简单的示例。

假设您已在一个问题中讨论过代码实现,并在本地处理您提出的更改。将提交推送到GitLab中远程存储库中的功能分支后,将触发为项目设置的CI / CD管道。通过这样做,GitLab CI / CD:

  • 运行自动脚本(顺序或并行)到:
    • 构建并测试您的应用。
    • 使用“评论应用”预览每个合并请求的更改,如您所见localhost

一旦您对实施感到满意:

  • 让您的代码经过审核和批准。
  • 将功能分支合并到默认分支。
    • GitLab CI / CD会自动将更改部署到生产环境中。
  • 最后,如果出现问题,您和您的团队可以轻松地将其回滚。

GitLab工作流程示例

GitLab CI / CD能够做得更多,但这个工作流程体现了GitLab跟踪整个过程的能力,而无需任何外部工具来交付您的软件。而且,最有用的是,您可以通过GitLab UI可视化所有步骤。

5、首次设置 GitLab CI / CD

要开始使用GitLab CI / CD,您需要熟悉.gitlab-ci.yml配置文件语法及其属性。

本文档介绍了GitLab CI / CD在GitLab页面范围内的概念,用于部署静态网站。虽然它适用于想要从头开始编写自己的Pages脚本的用户,但它也可以作为GitLab CI / CD设置过程的介绍。它涵盖了编写CI / CD配置文件的第一个常规步骤,因此我们建议您通读它以了解GitLab的CI / CD逻辑,并了解如何为任何应用程序编写自己的脚本(或调整现有脚本)。

有关GitLab的CI / CD配置选项的深入视图,请查看 .gitlab-ci.yml完整参考。

6、GitLab CI / CD功能集

  • 使用Auto DevOps轻松设置应用程序的整个生命周期。

  • 使用GitLab Pages部署静态网站。

  • 将您的应用程序部署到不同的环境。

  • 使用Review Apps预览每个合并请求的更改。

  • 使用Container Registry开发安全的私有Docker镜像。

  • 安装自己的GitLab Runner。

  • 安排管道。

  • 使用安全测试报告检查应用程序漏洞。

    具体实施参考:
    https://segmentfault.com/a/1190000016069906
    

三、Jenkins CI/CD

1、 Jenkins CI/CD 流程图

img

说明:这张图稍微更形象一点,上线之前先把代码git到版本仓库,然后通过Jenkins 如Java项目通过maven去构建,这是在非容器之前,典型的自动化的一个版本上线流程。那它有哪些问题呢?

如:它的测试环境,预生产环境,测试环境。会存在一定的兼容性问题 (环境之间会有一定的差异)

img

说明:它这里有一个docker harbor 的镜像仓库,通常会把你的环境打包为一个镜像,通过镜像的方式来部署。

Jenkins持续集成01—Jenkins服务搭建和部署

2、介绍 Jenkins

1、Jenkins概念

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。

2、Jenkins目的

① 持续、自动地构建/测试软件项目。

② 监控软件开放流程,快速问题定位及处理,提示开放效率。

3、特性

① 开源的java语言开发持续集成工具,支持CI,CD。

② 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。

③ 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。

④ 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。

⑤ 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

⑥ 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

4、产品发布流程

产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线

持续集成(Continuous integration,简称CI)

持续交付(Continuous delivery)

持续部署(continuous deployment)

3、安装Jenkins

1、安装JDK

​ Jenkins是Java编写的,所以需要先安装JDK,这里采用yum安装,如果对版本有需求,可以直接在Oracle官网下载JDK;也可自己编译安装。

2、安装Jenkins
1、上传 jdk11 tomcat jenkins.war
2、解压jdk
[root@jenkins ~]# yum -y install fontconfig 
[root@jenkins ~]# tar xf jdk-11.0.18_linux-x64_bin.tar.gz
3、解压tomcat
[root@jenkins ~]# tar xf apache-tomcat-8.5.50.tar.gz
4、拷贝并修改名称
[root@jenkins ~]# mv jdk-11.0.18/ /usr/local/java && mv apache-tomcat-8.5.50 /usr/local/tomcat
5、处理环境变量
[root@jenkins ~]# vim /etc/profile.d/java.sh
TOMCAT_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/java
PATH=$TOMCAT_HOME/bin:$JAVA_HOME/bin:$PATH
export TOMCAT_HOME JAVA_HOME PATH
[root@jenkins ~]# source /etc/profile.d/java.sh
6、上传jenkins
[root@jenkins ~]# rm -rf /usr/local/tomcat/webapps/*
[root@jenkins ~]# cp jenkins.war /usr/local/tomcat/webapps/
7、启动tomcat,并页面访问
[root@jenkins ~]# startup.sh访问 ip:8080

image-20240516094452422

为了安全考虑,首先需要解锁Jenkins,请在/var/lib/jenkins/secrets/initialAdminPassword中查看文件。

img

在Jenkins服务器上查询管理员密码

[root@centos7-1 ~]# cat /data/jenkins/secrets/initialAdminPassword

250d0360e2a149dbb7402f96a26945e2

② 选择需要安装的插件

选择默认推荐即可,会安装通用的社区插件,剩下的可以在使用的时候再进行安装。

img

开始安装,由于网络原因,有一些插件会安装失败。

img

③ 设置Admin用户和密码

img

④ 安装完成

img

⑤ 登录Jenkins

img

image-20201113145605132

安装插件:
gitlab
gitlab webhook
blue ocean
maven
Pipeline Maven

4、安装完后,简单的配置

1、系统配置

① 系统消息:Welcome to Jenkins~

② 全局属性—>环境变量,可根据自己的项目添加;如:gitlab:

img

③ 扩展邮件通知(用于之后项目构建后发送邮件)

img

④ 邮件配置

管理监控配置—>系统管理员邮件地址:along@163.com,要和下面的用户名一致;

邮件通知,配置如下:可以点击测试,是否配置成功

img

2、全局工具配置

如果你持续集成需要用的哪些工具,就需要在这里添加配置;后边持续集成中,将会详细讲解;

这里只举例:添加JDK工具

点击新增—> 取消自动安装 ---->然后查询Jenkins服务器上JDK的路径,填写JAVA_HOME —> 保存即可

img

3、插件管理

这里有可更新、可选未安装插件、已安装插件;可以通过过滤快速查找

img

5、添加节点

node 节点的作用

  1. 分布式构建:通过添加多个节点,可以在多台计算机上并行执行构建任务,从而加快构建速度和提高效率。节点可以是物理计算机、虚拟机、云实例或容器等。
  2. 扩展计算能力:通过添加更多的节点,可以扩展Jenkins的计算能力,使其能够处理更多的并发构建任务,从而适应不断增长的工作负载。
  3. 平台兼容性:使用Node节点可以在不同的操作系统、不同的硬件平台上执行构建任务,以满足项目的特定需求。您可以配置节点以适应特定的操作系统、软件环境和工具链。
  4. 隔离和安全性:将构建任务分配给独立的节点可以提供更好的隔离和安全性。节点之间相互独立,一个节点的故障或问题不会影响其他节点的工作。
  5. 负载平衡:Jenkins可以根据节点的负载情况自动分配任务,从而实现负载平衡。这样可以更好地利用可用资源,并确保每个节点都能以最佳状态运行。
1、准备节点
1、准备一台新的服务器并配置java环境
2、主节点添加凭据,并推送公钥
3、在node节点配置需要的工具
2、系统配置

image-20230611193513253

3、添加节点

image-20230611193601845

image-20230611194016152

image-20230611194029326

4、检查节点

image-20230611194101116

6、开始一个简单的项目

1、新建任务

输入一个项目名称,构建一个自由风格的软件项目

img

2、配置项目

(1)General

描述:test 自己随意添加;

显示名称:along 是Jenkins看到的项目名称;

其他更多的用法,后续再讲;

img

(2)源码管理(就是拉取代码的地方,可以选择git或SVN)

① 选择git,输入gitlab项目地址

img

② 点击Add添加凭据

选择SSH Username with pricate key,秘钥认证,输入私钥即可;

注:Jenkins服务器需在gitlab项目上有key

img

因为只是简单的示范,所以就只有这些简单的配置;

3、构建项目

(1)点击项目damo,立即构建

img

(2)可以点击#1,查询详细的控制台输出信息;

img

(3)在Jenkins服务器上认证

在这个目录下能找到自己拉取git的项目;证明项目成功完成

[root@jenkins ~]# ls /data/jenkins/workspace/

damo damo@tmp

四、Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

1、环境需求

本帖针对的是Linux环境,Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。

  • 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_144,网上帖子也很多,不赘述。
  • 2.Jenkins 持续集成和持续交付项目。
  • 3.现有项目及gitlab(SVN或本地路径也行)地址。
  • 4.maven工具及环境变量配置,用于构建和管理任何基于Java的项目。
  • 5.下载解压Tomcat,我用的是Tomcat8。

2、环境准备

1、安装服务

(1)安装JDK、Jenkins和gitlab

JDK yum安装和编译安装都可以;

gitlab 安装详见:gitlab 部署;

tomcat 安装详见:tomcat 服务部署

(2)mave安装

1、下载 maven 包

http://mirrors.cnnic.cn/apache/maven 选择自己需要的maven版本

wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -zxvf apache-maven-3.5.4-bin.tar.gz
2、配置环境变量

(1)配置全局环境变量

vim /etc/profile.d/jenkins_tools.sh

#JDK
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export TIME_STYLE='+%Y/%m/%d %H:%M:%S'#maven
export MAVEN_HOME=/data/jenkins_tools/maven-3.5.4
export PATH=${MAVEN_HOME}/bin:$PATH 

使环境变量生效

source /etc/profile.d/jenkins_tools.sh 

(2)测试

java -versionjava version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
$ mvn -version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /data/jenkins_tools/maven-3.5.4
Java version: 1.8.0_144, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_144/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.26.2.el7.x86_64", arch: "amd64", family: "unix"

3、Jenkins工具、环境、插件配置

1、全局工具配置

系统管理—>全局工具配置

修改maven默认settings.xml文件,配置git、jdk、maven工具后保存(不要勾选自动安装)。

img

img

2、配置全局变量

系统管理—>系统设置—>全局属性

img

3、安装3个插件

系统管理—>插件管理

(1)Maven Integration plugin 安装此插件才能构建maven项目

img

(2)Deploy to container Plugin 安装此插件,才能将打好的包部署到tomcat上

img

(3) mvn配置国内源

4、创建一个Maven工程

1、构建maven项目

img

2、源码管理

填写git地址信息,添加认证凭据,详见Jenkins持续集成01—Jenkins服务搭建和部署

img

3、构建触发器,可以根据自己的业务需求定制

① Build whenever a SNAPSHOT dependency is built:检测到gitlab项目代码被重新构建后就触发;

② 轮询 SCM:*/2 * * * * ,每隔2分钟检查一次

img

img

4、打包前步骤,根据自己需求可以添加一些操作:如一些shell命令

img

5、build打包构建

① Root POM:指定pom.xml的文件路径(这里是相对路径)

② Goals and options:mvn的选项,构件参数

img

6、构建后操作

(1)选择deploy war to a container,部署到tomcat

img

(2)配置tomcat信息

img

  • WAR/EAR files:输入war包的相对路径,如我的war包在新建目录的target下
  • context path:输入部署tomcat的名称,就部署在webapps下的目录名
  • add container:增加容器,一般选tomcat 8X就可以。这里的username与password需要到tomcat的conf文件夹中的tomcat-users.xml修改。tomcat URL就是你希望把war包部署到的tomcat所在IP地址,最后面不需要再加斜杠/。
  • tomcat-users.xml中的用户名及密码默认是注释掉的,所以需要修改,也可以直接复制以下代码到之前。
  <role rolename="tomcat"/><role rolename="role1"/><role rolename="manager-gui" /><role rolename="manager-script" /><role rolename="manager-status" /><user username="tomcat" password="tomcat" roles="tomcat"/><user username="both" password="tomcat" roles="tomcat,role1"/><user username="role1" password="tomcat" roles="role1"/><user username="deploy" password="tomcat" roles="manager-gui,manager-script,manager-status" />
  • 然后到tomcat下面webapps/manager/META-INF/context.xml 注销掉红色部分。因为默认tomcat不可以通过外部ip访问管理界面。一定要启动Tomcat,不然等构建等时候会报拒绝连接
<Context antiResourceLocking="false" privileged="true" ><!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />--><Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

(3)添加tomcat的凭据

img

7、配置邮件通知

增加构建后操作—>Editable Email Notification

使用邮件同事前,需要再系统配置中进行邮箱配置

(1)配置邮件信息

img

(2)设置邮件触发器triggers

默认触发器:Failure - Any 无论何时失败触发;加一个success作为测试;

修改收件人为:recipient list

img

到这里就配置完成了,点击构建从控制台查看输出信息即可

5、构建项目

1、立即构建

img

2、查看控制台输出

点击#1—>控制台输出;就能看到执行的整个过程

img

3、验证项目是否构建成功

(1)成功向上蓝色;失败即为红色

img

(2)在tomcat上查看项目

img

(3)收到项目构建成功的邮件

img

五、jenkins + gitlab + nginx 自动部署(webhook)

构建新的项目

构建自由风格项目

源码管理

git 如何添加认证

构建触发器 gitlab-plugin gitlab-hook

要记录下上边的URL和认证密钥

切换到gitlab,找到对应的git库 点击setting --> Integrations ,填写以下内容,然后下拉点击 Add webhook

可能会报下列错误,这是新版本gitlab 的保护功能,禁止内网跳转,解决方法如下:

点击setting --> network 找到 Outbound requests

重复上列步骤添加 webhook。即可成功。

测试:

六、Jenkins与Docker的自动化CI/CD流水线实践

Pipeline 有诸多优点,例如:

  • 项目发布可视化,明确阶段,方便处理问题
  • 一个Jenkins File文件管理整个项目生命周期
  • Jenkins File可以放到项目代码中版本管理

Jenkins管理界面

img

操作实例:Pipeline的简单使用

img

img

img

这里是比较重要的核心,构建流程

img

点击保存之后,立即构建

img

映像中普通Jenkins构建方式步骤:

img

而pipeline 的构建流程:

img

pipeline有诸多优点:

  • 项目发布可视化,明确阶段,方便处理问题
  • 一个Jenkins File 文件管理整个项目生命周期
  • Jenkins File 可以放到项目代码中版本管理

img

一个Jenkins file 维护一个生命周期,就像写代码一样,只维护这个file文件就可以了。

img

img

img

小结:

Jenkins与kubernetes搭建CI/CD流水线有诸多好处:

  • Jenkins高可用
  • 自动伸缩
  • 环境隔离
  • 易维护

Maven插件:

Maven Integration plugin

Deploy to container Plugin

webhook插件:

gitlab-plugin

gitlab-hook

jenkins 插件安装缓慢问题

vim ~/.jenkins/hudson.model.UpdateCenter.xml
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.jsonvim ~/.jenkins/updates/default.json
% s/www.google.com/www.baidu.com/g
% s/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g旧版: http://updates.jenkins-ci.org/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 
新版:https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 修改完以后,重启Jenkins服务再输入密码,继续安装,速度贼快。

代码中版本管理

[外链图片转存中…(img-FD9Gvysk-1716297681339)]

一个Jenkins file 维护一个生命周期,就像写代码一样,只维护这个file文件就可以了。

[外链图片转存中…(img-Y27e0Ib5-1716297681339)]

[外链图片转存中…(img-Aj0FTZuk-1716297681340)]

[外链图片转存中…(img-FvZ5XOk7-1716297681340)]

小结:

Jenkins与kubernetes搭建CI/CD流水线有诸多好处:

  • Jenkins高可用
  • 自动伸缩
  • 环境隔离
  • 易维护

Maven插件:

Maven Integration plugin

Deploy to container Plugin

webhook插件:

gitlab-plugin

gitlab-hook

jenkins 插件安装缓慢问题

vim ~/.jenkins/hudson.model.UpdateCenter.xml
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.jsonvim ~/.jenkins/updates/default.json
% s/www.google.com/www.baidu.com/g
% s/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g旧版: http://updates.jenkins-ci.org/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 
新版:https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 修改完以后,重启Jenkins服务再输入密码,继续安装,速度贼快。

总结笔记

http下载gitee直接下载

ssh的话需要在个人设置里面添加要拉去代码的服务器的公钥才可以

上传的话就要登录才可以

image-20240515091905876

有新的项目之后,分支

image-20240515095945452

添加课件 1.7.1

gitlab 配置:两核四G

xiaowang 前端

xiaoli 后端

牛马 管理

xiaohei 维护

jenkins安装及插件

配置从节点的时候,高级里面的java路径不需要输入

image-20240519124608731

邮件发送失败? 在全局里面少了个点

https://gitee.com/hyunze/easy-springmvc-maven gitee的项目克隆

gitlab root Qq111111

jenkins admin 123456

gitee私人令牌:55ef1dd1aa15751956581e184907c995

自己下载的gitee的项目上传到gitlab之后需要更改pom文件的java版本号

当我修改了gitlab里面的java文件,文件名直接改了,我都不知道发生了什么,然后我去jenkins的服务器里面找到那个文件并改了名字才好了/root/.jenkins/workspace/maven-test1/src/main/java/spring/demo/service/D…

参数化构建

模版1 3 4 jenkins gitlab tomcat-java 没做完 先快照 2是node01

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

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

相关文章

【吊打面试官系列】Java高并发篇 - ReadWriteLock 是什么 ?

大家好&#xff0c;我是锋哥。今天分享关于 【ReadWriteLock 是什么 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; ReadWriteLock 是什么 &#xff1f; 首先明确一下&#xff0c;不是说 ReentrantLock 不好&#xff0c;只是 ReentrantLock 某些时候有局限。 …

2024/5/22 学习杂记

为什么功率放大电路在模电中经常提到&#xff1f; 模拟信号&#xff1a;它是连续变化的电信号&#xff0c;它在时间上和幅度上都是连续的&#xff0c;能够代表信息的连续变化。大多数物理量为模拟信号&#xff0c;如&#xff1a;温度、压力、流量… 非电物理量通过传感器变换成…

鸿蒙 DevEcoStudio:发布进度条通知

使用notificationManager及wantAgent实现功能import notificationManager from ohos.notificationManager import wantAgent from ohos.app.ability.wantAgent Entry Component struct Index {State message: string 发布进度条通知progressValue: number0async publicDownloa…

基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api

前言 最近介绍了一款免费的验证码识别网站,识别效率太低,考虑到ddddocr是开源的,决定搭建搭建一个,发现原作者sml2h3已经推出好久了,但是网上没有宝塔安装的教程,于是本次通过宝塔搭建属于自己的带带弟弟OCR通用验证码离线本地识别 原项目地址:https://github.com/sml2…

Serverless应用引擎SAE评测|一分钟部署在线游戏

Serverless应用引擎SAE评测|一分钟部署在线游戏 什么是Serverless应用引擎SAE一分钟部署在线游戏SAE控制台 资源释放其他操作 在进行Serverless应用引擎SAE评测之前&#xff0c;首先需要了解一下什么是SAE。 什么是Serverless应用引擎SAE Serverless应用引擎SAE&#xff08;Se…

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…

手把手教你解决 Hive 的数据倾斜

文章目录 数据倾斜是什么&#xff1f;产生数据倾斜的场景1.空值引发的数据倾斜2.不可拆分的大文件产生的数据倾斜3.数值膨胀引发的数据倾斜4.不同数据类型引发的数据倾斜5.Count(distinct) 引发的数据倾斜6.表 Join 操作时引发数据倾斜7.group by 引发的数据倾斜 解决数据倾斜数…

Python | Leetcode Python题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

网络拓扑—FTP服务搭建

文章目录 FTP服务搭建网络拓扑配置网络FTPPC 安装FTP服务配置FTP服务FTP用户配置—1PC机访问FTP站点IE浏览器访问终端访问 FTP用户配置—2PC机访问ftp站点IE浏览器访问终端访问 FTP服务搭建 网络拓扑 //交换机忽略不计 FTP服务IP&#xff1a;192.168.1.1 PC机IP&#xff1a;19…

多级留言/评论的功能实现——Vue3前端篇

文章目录 思路分析封装组件父组件模板逻辑样式 子组件——二级留言模板逻辑样式 子组件——三级留言以上模板逻辑样式 留言组件的使用 写完论文了&#xff0c;来把评论的前端部分补一下。 前端的实现思路是自己摸索出来的&#xff0c;没找到可以符合自己需求的参考&#xff0c;…

windows 7 10 11快捷键到启动页面

1.快速打开用户启动文件夹 shell:startup 方式2&#xff1a;快速打开系统启动文件夹 shell:Common Startup shell:Common Startup

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO inline bazel增量编译

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO Theory Shared Library Symbol Conflicts (on Linux) 从左往右查找:Note that the linker only looks further down the line when looking for symbols used by but not defined in the current lib.Linux 下…

统计信号处理基础 习题解答10-4

题目&#xff1a; 重复习题10.3&#xff0c;但条件PDF变为&#xff1a; 以及均匀先验。如果非常大&#xff0c;这样先验知识很少&#xff0c;则会出现什么情况。 解答&#xff1a; 如果记 那么&#xff0c;根据条件独立性质&#xff0c;得到&#xff1a; 其中&#xff0c;&am…

SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)

了解了常见的几种手势后&#xff0c;接下来我们了解一下组合手势的操作&#xff0c;当一个视图存在多个手势的时候&#xff0c;为了避免手势冲突&#xff0c;SwiftUI提供了自定义手势的方法&#xff0c;比如同时进行&#xff0c;顺序进行等等。 以下是一些常见的多种手势组合使…

关于AI绘画的模型、开源项目、工具、技巧的学习

目录 一、AI绘画的大模型有哪些&#xff1f; 二、Stable Diffusion是一个流行的AI绘画开源项目。 三、AI绘画的开源工具有哪些&#xff1f; 四、AI绘画的技巧 五、最简单的实践 一、AI绘画的大模型有哪些&#xff1f; AI绘画领域中存在多种大模型&#xff0c;每种模型都有…

渗透测试 一个很奇怪的支付漏洞

新手实战刷课网站、好玩又有趣&#xff01; 第一步 打开网站、任意账户名密码登陆发现验证码可重复利用 这时候我们可以试试admin账号、发现如果账号正确会提示账户已存在、反之回显账户密码错误 第二步 既然验证码可以重复利用&#xff1b;而且账号名有回显 这时候我们试…

学习使用博客记录生活

学习使用博客记录生活 新的改变 今天新的开始&#xff0c;让我用图片开始记录吧 看这个背景图片怎么样

人生苦短,我学python之数据类型(上)

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 一.元组 &#xff08;tuple&#xff09; 二.集合&#xff08;set&#xff09; 三.字典(dict) 一.元组 &#…

MySQL存储过程for循环处理查询结果

在MySQL数据库中&#xff0c;存储过程是一种预编译的SQL语句集&#xff0c;可以被多次调用。在MySQL中使用存储过程查询到结果后&#xff0c;有时候需要对这些结果进行循环处理。 1. 创建表 CREATE TABLE t_job (job_id int(11) unsigned NOT NULL AUTO_INCREMENT,job_name v…

崆峒酥饼:端午佳节的美味之选

崆峒酥饼&#xff1a;端午佳节的美味之选 在端午佳节来临之际&#xff0c;崆峒酥饼成为了备受瞩目的佳节之选。崆峒酥饼以其独特的制作工艺和口感&#xff0c;为这个传统节日增添了一份美味与温馨。 崆峒酥饼源自甘肃平凉&#xff0c;是当地的传统名点。它选用优质的面粉、油脂…