当前位置 : 主页 > 操作系统 > centos >

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布

来源:互联网 收集:自由互联 发布时间:2022-09-29
Jenkins构建CI/CD Jenkins构建CI/CD 什么是CI/CD:持续集成/持续发布—开发(git) --git主库–jenkins (git+jdk+tomcat+maven打包+测试)–发布到tomcat服务器 Jenkins是一个功能强大的应用程序,允许持续集

Jenkins构建CI/CD

Jenkins构建CI/CD

什么是CI/CD:持续集成/持续发布—开发(git) -->git主库–>jenkins (git+jdk+tomcat+maven打包+测试)–>发布到tomcat服务器

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

CI / CD 方法简介

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

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

三种主要方法:

持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。
·
持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境/灰度环境、生产环境。 
·
持续交付(Continuous Delivery, CD): 将最终产品发布到生产环境、给用户使用。

一、jenkins介绍

Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。 插件 通过更新中心中的 1000 多个插件,Jenkins 集成了持续集成和持续交付工具等等。

Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
·
我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL(代码仓库地址),将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。

  • 1、Jenkins概述

是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建的一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的容器中运行,也可独立运行。
jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。

  • 2、Jenkins目标

① 持续、自动地构建/测试软件项目。
② 监控软件开放流程,快速问题定位及处理,提高开发效率。

  • 3、Jenkins特性

① 开源的java语言开发持续集成工具,支持CI,CD。
② 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
③ 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
④ 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
⑤ 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
⑥ 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统

  • 测试环境中:

1.开发者会将代码上传到版本库中。

2.jenkins通过配置版本库的连接地址,获取到源代码。

3.jenkins获取到源代码之后通过参数化构建(或者触发器)开始编译打包。

4.jenkins通过调用maven(Ant或者Gradle)命令实现编译打包过程。

5.生成的war包通过ssh插件上传到远程tomcat服务器中通过shell脚本自动发布项目。

  • 生产环境:

测试环境将项目测试没问题后,将项目推送到线上正式环境。
·
1.可以选择手动。
2.也可以通过调用脚本推送过去。

  • 4、产品发布流程

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

持续集成(Continuous integration,简称CI) 持续部署(continuous deployment) 持续交付(Continuous delivery)

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_02


二、部署应用Jenkins+Github+Tomcat实战

  • 1、准备环境:

两台机器

git-server ----https://github.com/bingyue/easy-springmvc-maven jenkins-server ---192.168.246.212 #最好是3个G以上 java-server -----192.168.246.210 https://github.com/bingyue/easy-springmvc-maven
  • 1.部署jenkins服务器
安装git客户端: [root@jenkins-server ~]# yum install -y git #安装git客户端 [root@jenkins-server ~]# ssh-keygen [root@jenkins-server ~]# ssh-copy-id -i root@192.168.246.210 #拷贝到后端java服务器 开始部署jenkins: #1.上传jdk [root@jenkins-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/ [root@jenkins-server ~]# cd /usr/local/ [root@jenkins-server local]# mv jdk1.8.0_191/ java #2.安装tomcat [root@jenkins-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz [root@jenkins-server ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /usr/local/ [root@jenkins-server ~]# cd /usr/local/ [root@jenkins-server local]# mv apache-tomcat-8.5.42/ tomcat #3.安装maven [root@jenkins-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz [root@jenkins-server ~]# tar xzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/java [root@jenkins-server ~]# cd /usr/local/java [root@jenkins-server java]# mv apache-maven-3.5.4/ maven #设置变量: [root@jenkins-server ~]# vim /etc/profile JAVA_HOME=/usr/local/java MAVEN_HOME=/usr/local/java/maven PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME [root@jenkins-server ~]# source /etc/profile #验证: [root@jenkins-server ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@jenkins-server ~]# mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00) Maven home: /usr/local/java/maven Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/local/java/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix" #下载jenkins的安装包: #安装jenkins:2.196 ----通过官网直接下载war包。 #官网:http://updates.jenkins-ci.org/download/war/ [root@jenkins-server ~]# wget http://updates.jenkins-ci.org/download/war/2.196/jenkins.war 部署jenkins [root@jenkins-server ~]# cd /usr/local/tomcat/webapps/ [root@jenkins-server webapps]# rm -rf * [root@jenkins-server webapps]# cp /root/jenkins.war . [root@jenkins-server webapps]# ../bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomca t/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.

如果启动了访问提示

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_03

解决办法在

[root@jenkins-server ~]# cd /usr/local/tomcat/conf/ [root@jenkins-server conf]# vim context.xml #添加如下内容: <Resources cachingAllowed="true" cacheMaxSize="100000" />

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_04

重启tomcat

  • 2.如果还是不行:
[root@jenkins ~]# cd .jenkins/updates/ 到jenkins的工作目录下 [root@jenkins updates]# vim default.json #把 "connectionCheckUrl":"http://www.google.com/" #改为 "connectionCheckUrl":"http://www.baidu.com/"
  • 3.还是不行:
需要进入jenkins的工作目录,打开-----hudson.model.UpdateCenter.xml 把http://updates.jenkins-ci.org/update-center.json 改为 http://mirror.xmission.com/jenkins/updates/update-center.json 改完重启!

使用运行war的形式安装jenkins,因为伟大的墙出现,“该jenkins实例似乎已离线” 问题:

解决办法:

#需要进入jenkins的工作目录,打开hudson.model.UpdateCenter.xml将 url 中的 https://updates.jenkins.io/update-center.json #更改为 http://updates.jenkins.io/update-center.json #即去掉 https 中的 s 。 #或者更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json #国内的清华大学的镜像地址。 #重启tomcat
  • 4.访问界面: —需等一会

http://IP:8080/jenkins
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_05

[root@jenkins-server ~]# cat /opt/jenkins/secrets/initialAdminPassword b36b8b04c5b84e659701304dfe848999 #复制密码粘贴到上面提示的空格里面。

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_06

下面需要很长很长一段时间,耐心等候即可

安装完成后创建系统管理员(自行设定用户名密码)

创建完成后进行实例配置:讲访问地址放进配置框即可—>点击保存—>开始使用

如果注销用户,再次登录失败,例如下图

可通过查看管理员密码文件,进行登录 [root@jenkins-server ~]# cat /root/.jenkins/secrets/initialAdminPassword
f0af29c6ee90435b924091db654b6d81 #复制粘贴到密码框

  • 5.安装插件
安装插件: 所需的插件: • Maven插件 Maven Integration plugin • 发布插件 Deploy to container Plugin 需要安装插件如下: ------------------------------------- 安装插件Deploy to container ---支持自动化代码部署到tomcat容器 GIT pligin 可能已经安装 Maven Integration :jenkins利用Maven编译,打包所需插件 Publish Over SSH :通过ssh连接 ssh 插件 安装过程: 系统管理--->插件管理---->可选插件--->过滤Deploy to container---->勾选--->直接安装

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_07
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_08
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_09
输入插件名后按回车!

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_10
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_11
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_12
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_13
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_14
以上所有插件安装完成

开始配置ssh
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_15
邮箱(可选可不选)

  • 6.添加远程ssh-server:
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_16
  • 7.配置jdk,maven命令,全局配置
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_17
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_18
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_19
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_20
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_21
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_22
  • 8.构建发布任务

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_23
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_24
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_25
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_26
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_27
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_28

  • 9.调用maven命令

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_29
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_30
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_31

  • 10.部署java服务器,做jenkins打包上线
[root@java-server ~]# mkdir -p /data/application 上传jdk [root@java-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/ [root@java-server ~]# cd /usr/local/ [root@java-server local]# mv jdk1.8.0_191/ java 下载tomcat [root@java-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz [root@java-server ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /data/application/ [root@java-server ~]# cd /data/application/ [root@java-server application]# mv apache-tomcat-8.5.42/ tomcat 设置环境变量 [root@java-server ~]# vim /etc/profile export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar export TOMCAT_HOME=/data/application/tomcat [root@java-server ~]# source /etc/profile 测试: [root@java-server ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) 删除tomcat默认发布目录下面的内容: [root@java-server ~]# rm -rf /data/application/tomcat/webapps/* [root@java-server ~]# cd /data/application/tomcat/webapps/ [root@java-server webapps]# ls 创建目录和脚本: [root@java-server ~]# mkdir /opt/script #创建脚本目录 [root@java-server ~]# vim app-jenkins.sh #创建脚本 脚本内容在后面: [root@java-server ~]# chmod +x app-jenkins.sh #添加执行权限 [root@java-server ~]# mv app-jenkins.sh /opt/script/ 脚本内容: [root@java-server script]# cat app-jenkins.sh #!/usr/bin/bash #本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。 #Defining variables export JAVA_HOME=/usr/local/java webapp_path="/data/application/tomcat/webapps" tomcat_run="/data/application/tomcat/bin" updata_path="/data/update/`date +%F-%T`" backup_path="/data/backup/`date +%F-%T`" tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'` files_dir="easy-springmvc-maven" files="easy-springmvc-maven.war" job_path="/root/upload" #Preparation environment echo "Creating related directory" mkdir -p $updata_path mkdir -p $backup_path echo "Move the uploaded war package to the update directory" mv $job_path/$files $updata_path echo "=========================================================" cd /opt echo "Backing up java project" if [ -f $webapp_path/$files ];then tar czf $backup_path/`date +%F-%H`.tar.gz $webapp_path if [ $? -ne 0 ];then echo "打包失败,自动退出" exit 1 else echo "Checking if tomcat is started" if [ -n "$tomcat_pid" ];then kill -9 $tomcat_pid if [ $? -ne 0 ];then echo "tomcat关闭失败,将会自动退出" exit 2 fi fi cd $webapp_path rm -rf $files && rm -rf $files_dir cp $updata_path/$files $webapp_path cd /opt $tomcat_run/startup.sh sleep 5 echo "显示tomcat的pid" echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`" echo "tomcat startup" echo "请手动查看tomcat日志。脚本将会自动退出" fi else echo "Checking if tomcat is started" if [ -n "$tomcat_pid" ];then kill -9 $tomcat_pid if [ $? -ne 0 ];then echo "tomcat关闭失败,将会自动退出" exit 2 fi fi cp $updata_path/$files $webapp_path $tomcat_run/startup.sh sleep 5 echo "显示tomcat的pid" echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`" echo "tomcat startup" echo "请手动查看tomcat日志。脚本将会自动退出" fi
  • 11.回到jenkins页面开始构建任务
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_32
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_33
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_34
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_35
    Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_36
  • 12.登陆java-server服务器查看:

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_37
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_38

如配置了邮箱查看邮箱,可看到消息


三、部署第一个小项目Jenkins+Gitlab

Jenkins服务器去拉取代码。所以要下载git客户端

[root@jenkins-server ~]# yum -y install git

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_39

开始一个简单的项目

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_40
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_41
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_42
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_43
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_44
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_45
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_46

[root@jenkins ~]# cat /root/.ssh/id_rsa //查看Jenkins服务器的私钥

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_47
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_48
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_49
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_50

Jenkins端配置好之后,还应在gitlab端配置Jenkins服务器的公钥
在jenkins服务器上查看公钥
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_51

复制粘贴到gitlab

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux系统_52

然后去构建项目。自动拉取代码
Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_53

注意看拉取到了哪个目录下

Linux CI/CD & Jenkins & GitLab——CI/CD持续集成、部署、发布_Linux教程_54

在Jenkins服务器上认证
在这个目录下能找到自己拉取git的项目;证明项目成功完成

[root@jenkins ~]# ls /root/.jenkins/workspace/demo beifen.sh

END

网友评论