Jenkins自动化部署_自动化部署工具jenkins-程序员宅基地

技术标签: CICD  jenkins  

视频地址: https://ke.qq.com/course/3136585
笔记参考: https://www.it235.com/实用工具/持续集成/jenkins.html

一. Linux虚拟机安装

资源下载地址 链接:https://pan.baidu.com/s/1OFVRzCySbrzLs-P37Iw9gg 提取码:wiih

  • 下载IOS文件
  • 安装vmware
  • 安装虚拟机
  • 终端连接

二. Gitlab代码托管服务器安装

1. Gitlab简介

官网

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。

2. 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包,并且安装
	在线下载安装包:
		wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm 或者
		wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
	安装:
	rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm 或者
	rpm -i gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
6. 修改gitlab配置
	vi /etc/gitlab/gitlab.rb
	修改gitlab访问地址和端口,默认为80,我们改为82
	external_url 'http://192.168.224.100: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密码的页面,修改密码后,然后登录即可
在这里插入图片描述

3. Gitlab配置

3.1 Gitlab添加组

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理

在这里插入图片描述
在这里插入图片描述

3.2 创建用户

创建用户的时候,可以选择Regular或Admin类型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建完用户后,立即修改密码
在这里插入图片描述
在这里插入图片描述

3.3 将用户添加到组中

选择某个用户组,进行Members管理组的成员
在这里插入图片描述

Gitlab用户在组里面有5种不同权限:

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限
  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组
    长可以赋予这个权限

3.4 在用户组中创建项目

以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目
在这里插入图片描述

3.5 源码上传到Gitlab仓库

下面来到IDEA开发工具,我们已经准备好一个简单的Web应用准备到集成部署。
我们要把源码上传到Gitlab的项目仓库中。

idea项目关联git及推送代码至gitlab

三. Jenkins安装

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

jenkins官网地址

1. 主要配置

#配置增加chentf用户组
groupadd chentf
#创建jenkins用户,并指定刚才创建的用户组
useradd jenkins -g chentf
#给已经存在的用户jenkins指定组chentf
usermod -G chentf jenkins
#给用户设置密码
passwd jenkins
#删除用户
userdel jenkins
#删除用户组
groupdel chentf

#创建存放jenkins工具的目录,并指定权限,因jenkins后期构建比较占用磁盘,此处建议先挂载磁盘
mkdir -p /data/software #创建目录
chown -R jenkins:chentf /data/sofware #给创建的用户赋权限

# 切换jenkins用户,进入到software目录,并下载jenkins.war
$ su jenkins
$ cd /data/software/
# 如果下载较慢,建议采用迅雷下载,然后上传
$ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

2. 安装java环境

	#解压下载的jdk文件
	$ tar -zxvf jdk8u181.tar.gz
  • 配置/etc/profile的内容
	#编辑环境配置文件
	$ vim /etc/profile 
	
	# 在最底部加入以下内容后保存并退出
	# JDK 注意usr/local/java/路径根据自己实际安装路径进行修改
	export JAVA_HOME=/usr/local/java/jdk1.8.0_181
	export PATH=$JAVA_HOME/bin:$PATH
	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 使配置生效
	#刷新环境配置文件
	$ source /etc/profile
  • 检测java环境信息
	#检查jdk是否安装成功
	$ java -version
	java version "1.8.0_181"
	Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
	Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

3. 启动jenkins

# 使用nohup命令启动,并指定日志文件
$ nohup java -jar /data/software/jenkins.war  --httpPort=8777 --httpsPort=8778 > /data/software/jenkins.log 2>&1 &

使用tail命令查看启动日志,日志中会输出jenkins密码

#查看jenkins启动日志
$ tail -222f jenkins.log

在这里插入图片描述

4.开发8777端口供外网访问

如果是云服务器,开放安全组即可,如果是虚拟机在防火墙中加入8777端口并重载配置

阿里云服务器开发安全组
在这里插入图片描述虚拟机在防火墙中加入8777端口并重载配置

# 开启防火墙8777端口
$ firewall-cmd --zone=public --add-port=8777/tcp --permanent

# 使配置生效
$ firewall-cmd --reload

# 防火墙扩展命令如下(云服务直接操作阿里云安全组即可)
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld 

(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
  命令含义:
  –zone #作用域
  –add-port=9200/tcp #添加端口,格式为:端口/通讯协议
  –permanent #永久生效,没有此参数重启后失效
  注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
(5)关闭防火墙端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent

5. 外网或宿主机访问浏览器地址

外网或宿主机访问浏览器地址http://ip地址:8777/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 中文设置

  • 进入Manage Jenkins中,点击Manage Plugins

在这里插入图片描述

  • 安装插件 Locale plugin , Localization: Chinese (Simplified) , Localization Support Plugin,如果失败就再安装一次

在这里插入图片描述

  • 设置中文,如果没有Locale,可能是上一步中插件未安装

在这里插入图片描述

在这里插入图片描述

  • 如果出现部分翻译,部分没翻译的现象,则删除插件。重启Jenkins(http://域名/jenkins/restart),再次安装插件(第一次安装只有部分翻译了)
  • 如果安装新的插件,重启了服务,又变成部分汉化了
  1. 将语言设定为zh_US,Jenkins切换为英文。
  2. 调用restart重启Jenkins:http://域名/jenkins/restart。
  3. 再次语言设定为zh_CN,刷新即可

7. 忘记密码

  • 进入到jenkins的工作目录,找到config.xml,我这里是/home/jenkins/.jenkins/config.xml
    修改该配置文件useSecurity的节点值为false
	<useSecurity>true</useSecurity>
  • 重启jenkins项目后,再次访问jenkins站点
  • 进入到系统管理

在这里插入图片描述
在这里插入图片描述

  • 进入到用户列表,找到admin用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 使用新密码登录即

四. Jenkins安装(简单方式)

1 安装jdk

Jenkins需要依赖JDK,所以先安装JDK1.8
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm

2. 安装Jenkins

Jenkins安装包下载页面

安装文件:jenkins-2.190.3-1.1.noarch.rpm
1. 把安装包上传到192.168.66.101服务器,进行安装
	rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
2. 修改Jenkins配置
	vi /etc/syscofig/jenkins
	修改内容如下:
	JENKINS_USER="root" # 注意该账号和linux管理员账号名称一致
	JENKINS_PORT="8888"
3. 启动Jenkins
	systemctl start jenkins
4. 打开浏览器访问
	http://192.168.224.129:8888
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
5. 获取并输入admin账户密码
	cat /var/lib/jenkins/secrets/initialAdminPassword
6. 跳过插件安装
	因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
7. 添加一个管理员账户,并进入Jenkins后台
8. 开始使用Jenkins

在这里插入图片描述

3. 卸载jenkins

如何干净的卸载jenkins
这里使用一种最方便的卸载方法,因为我这里jenkins安装也是使用rpm命令安装的
1、rpm形式卸载
rpm -e jenkins
2、检查是否卸载成功
rpm -ql jenkins
3、彻底删除残留文件
find / -iname jenkins | xargs -n 1000 rm -rf

五. 常用插件安装

1. 修改下载插件地址

jenkins的所有插件安装后需要重启才能生效,由于Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址(清华大学源)

  • 进入Manage Jenkins -> Manage Plugin -> Advanced 最下面有Update Site设置为: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    在这里插入图片描述
  • 修改服务器配置,进入jenkins安装目录,找到 /updates/default.json 文件(我这里是/home/jenkins/.jenkins/updates/default.json),将其中的 updates.jenkins-ci.org/download 替换成mirrors.tuna.tsinghua.edu.cn/jenkins,然后把www.google.com 修改为 www.baidu.com.
  • 进入到default.json所在目录
	cd /root/.jenkins/updates

在这里插入图片描述

  • 使用如下命令进行替换
# 修改之前建议做下备份,养成备份好习惯,大家在公屏上输入 备份大法好
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json 
  • 替换后使用http://IP地址:8777/restart重启jenkins

2. 安装皮肤插件

  • simple theme好看的主题插件,首先安装插件simple theme,安装主题并重新启动Jenkins。转到Manage Jenkins–> Manage Plugins。单击available选项卡并搜索simple theme插件。
    在这里插入图片描述
    在这里插入图片描述
  • 使用在线CSS样式

将打开后的内容,拷贝至主题配置中。系统设置 -> Theme,转到Manage Jenkins–> Configure并搜索Theme配置,然后点击新增:

在这里插入图片描述

CSS URL:在CSS字段中输入以下URL并保存,可以查看到效果(如果断网样式会失效)

http://afonsof.com/jenkins-material-theme/dist/material-teal.css

在这里插入图片描述

Extra CSS:在文本框内贴上CSS样式,在浏览器中打开上述样式的链接,并复制内容到文本框内一样能看到效果,而这种方式更加推荐,适用于没有网络的环境。

在这里插入图片描述

  • Git Parameter Plug-In , 安装后可以选择按照 git tag 或者 branch 发布版本。
  • NodeJS Plugin 安装后可以执行 npm 指令,打包和发布前端代码。
  • SonarQube Scanner for Jenkins 安装后可以执行 sonar scanner 指令,跑 CI 时检查代码质量。
  • Maven Integration plugin 设置 maven 指令的 classpath 和指令路径。
  • Workspace Cleanup Plugin 可以指定 workspace 最多保留多少个历史任务。
  • Credentials Binding用户凭证插件安装

3. jenkins中配置JDK路径

  • jenkins -> 全局工具配置 -> JDK -> 新增JDK
    在这里插入图片描述
    在这里插入图片描述

4. git凭据配置

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

  • 凭据插件安装Credentials Binding.
    在这里插入图片描述

该插件默认在一开始就会被安装,安装后在jenkins ->系统管理 -> 安全栏目会出现Manage Credentials选项,若没有需要安装插件并重启。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

凭证类型

  • Username with password常用:用户名和密码
  • GitHub APP新加入
  • SSH Username with private key常用: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。

Jenkins->系统管理->系统->全局凭证->添加凭证

  • Username with password类型
  • SSH Username with private key

5. 集成Git

为了jenkins能够拉取代码,需要安装Git环境和jenkins对应的Git插件

  • CentOS 7上安装Git环境
	# 安装
	$ yum install git -y
	# 查看版本
	$ git --version
  • jenkins安装Git插件
    在这里插入图片描述
  • jenkins配置Git环境

此处无需在jenkins中配置Git环境,采用默认生成的即可,jenkins会默认识别所在环境安装的git路径.

在这里插入图片描述

  • Gitee码云对接

Jenkins->系统管理->系统->全局凭证->添加凭证
在这里插入图片描述
在这里插入图片描述

  • Gitee上任意建一个仓库,最好是私有的,公有的不需要用户名和密码.
  • 测试凭据是否能够使用

jenkins -> 新建任务 -> 自由风格项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进入jenkins的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在jenkins工作空间中

在这里插入图片描述

到此用户名密码方式的凭证已经打通Git

6. Maven集成

在jenkins上发布Java项目时需要使用Maven来进行构建打包(Gradle项目则需要安装配置Gradle)

  • 下载安装
# 切换到root用户
$ su root
Password:

# 找一个目录存放maven
$ cd /root/java/jdk/

# 从阿里云上下载maven安装包
$ wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
$ tar -zxvf apache-maven-3.6.3-bin.tar.gz

# 当前maven的安装目录为:/root/java/jdk/apache-maven-3.6.3
  • 环境配置
$ vim /etc/profile

在最后面JDK配置上作出一些更改
export JAVA_HOME=/root/java/jdk/jdk1.8
export MAVEN_HOME=/root/java/jdk/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
  • 是配置生效并查看安装情况
#刷新配置文件
$ souce /etc/profile
$ mvn -version
  • jenkins 配置 Maven
    在这里插入图片描述
  • 安装Maven插件
    在这里插入图片描述
  • 使用jenkins用户在/data/software目录下新建一个repository文件夹,用来作为maven的仓库.
$ cd /data/software
$ mkdir repository
  • 使用root账户修改Maven的settings.xml文件(指定仓库目录和阿里云镜像)
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  
  <!--本地仓库-->          
  <localRepository>/data/software/repository</localRepository>
  
  <mirrors>
    <!--阿里云镜像-->
    <mirror>
      <id>aliyun-maven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven mirror</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>
    ...
    ...
</settings>
  • jenkins配置settings.xml文件

Maven测试项目构建

  • jenkins添加Maven项目任务
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 构建并查看控制台日志

保存后,点击立即构建,然后进入日志控制台查看日志.

在这里插入图片描述

从日志可以看到代码已经拉取下来了,而且走的是阿里云镜像,第一次拉取过程会比较长.
通过查看/data/software/repository 可以看到有存放拉取的jar包,通过这两个证明settings.xml文件配置成功且生效.

加粗样式

  • 构建成功后查看jenkins的wokspace目录下的jar包.
    在这里插入图片描述在这里插入图片描述
    到此Maven集成完毕.

六. 构建发布

jenkins发布项目的过程可以总结为4个步骤

  • 拉取代码
  • 编译打包mvn或npm
  • 部署至应用服务器scp
  • 启动应用

1. SpringBoot项目发布

  • 添加Maven风格的任务
    在这里插入图片描述
  • 填写Gitee仓库地址
    在这里插入图片描述
  • 填写Maven构建操作命令
    在这里插入图片描述
  • 配置Post Steps,选中执行shell
    在这里插入图片描述

思考,这里我们需要执行的shell内容是什么?
是不是把当前编译好的jar包拷贝到应用服务器取启动

  • 应用服务器的规划

由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里重新安装一台虚拟机,也可以直接开通阿里云的ECS

应用服务器信息

  • IP:101.200.192.105
  • JDK: 1.8
  • 用户: admin
  • 部署路径: /data/app/springboot
    -端口: 8089
  • 配置ssh免密登录

免密登录主要是方便jenkins服务器39.105.61.8的jenkins用户 -->应用服务器101.200.192.105的admin用户上的jar包拷贝,部署本就是jar包拷贝的过程.

在jenkins机器上使用jenkins用户生产密钥,注意此处是jenkins用户.

$ su jenkins
$ ssh-keygen -t rsa
# 3次回车

运行后会在当前用户的根目录生产一个.ssh文件夹
在这里插入图片描述

.ssh文件夹描述如下:

  • id_rsa: 生成的私钥文件
  • id_rsa.pub: 生成的公钥文件
    -: know_hosts: 刚开始没有,接下来会配置,已知的主机公钥清单.

接下来需要将公钥导入到认证文件中

$ su jenkins
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在这里插入图片描述

如果希望ssh公钥生效需要满足至少下面两个条件:

  • .ssh目录的权限必须是700
  • .ssh/authorized_keys文件权限必须是600

给对应文件授权

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

将authorized_keys 文件拷贝到应用服务器的admin用户.ssh目录下.

# 在应用服务器(101.200.192.105)上用admin用户创建/home/admin/.ssh文件夹

# 在jenkins服务器(39.105.61.8)上将pub公钥文件拷贝到应用服务器的.ssh目录下,并命名为authorized_keys
# scp -p ~/.ssh/id_rsa.pub [email protected]:/home/admin/.ssh/authorized_keys
  scp -p ~/.ssh/id_rsa.pub [email protected]:/home/admin/.ssh/authorized_keys

在jenkins (39.105.61.8)服务商进行免密连接测试.

# 在jenkins服务器的/home/admin目录下创建filetest文件,并拷贝到应用服务器
$ cd ~/
$ touch filetest
$ scp -p filetest [email protected]:/home/admin/filetest
# 进入到应用服务器(101.200.192.105),检查/home/admin目录下是否出现filetest

# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh [email protected]
Last login: Sun Sep 20 21:53:03 2020
$ exit

到此免密登录和拷贝实现成功,接下来jar包部署提供了快捷的帮助.

  • 编写jenins发布脚本
#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"  #部署路径
projectName="springboot" #项目名称

echo "待部署的应用服务器,可多台"
server_ips="192.168.1.2" #多台用,号隔开
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar admin@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar

EOF

done

echo "success"
  • 编写应用启动脚本
    在/data/app/springboot目录下创建启动脚本start.sh
$ touch start.sh
$ vim start.sh
# 将下面代码粘贴到start.sh中
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=it235-boot
APP_DIR="/data/app"

nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

在/data/app/springboot目录下创建停止脚本stop.sh

$ touch stop.sh
$ vim stop.sh
# 将下面代码粘贴到stop.sh中
#!/bin/bash

APP_ID=it235-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

并进行启动和停止测试,查看日期输出是否正常
将下述启动代码配置到jenkins中

sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
  • 访问并测试代码是否生效
    如果是虚拟机则需要给防火墙添加8089端口
$ su root
# 开启防火墙9010端口
$ firewall-cmd --zone=public --add-port=9010/tcp --permanent
# 使配置生效
$ firewall-cmd --reload

如果是ECS则需要在安全组中开放9010端口此处省略
此外也可以采用Nginx映射此处省略

  • 修改代码返回值,提交值Gitee,并再次进行构建发布,访问页面,查看结果是否更新.

到此一个简单的SpringBoot项目发布完成,但企业中的发布往往比这要复杂很多,在参数化构建章节再为您详细讲解,比如:

  • 自动构建
    -按分支发布
    -Tag发布
    -节点发布
    -流水线发布等等,

七. 企业级复杂构建场景

复杂发布场景概述

在企业中,要实现敏捷开发,必须结合jenkins的众多插件来实现更牛逼的特性。
思考一个问题:企业中究竟如何进行管理项目发布的?代码的回滚怎么做?

  • 开发环境:一般在本地机房,前后端开发联调,后端改动代码后即可实时在开发调试环境更新,供前端自行调试
  • 测试环境:一般在本地机房,不同迭代对应不同的测试环境,如何保证环境不冲突,交付测试后如何最快通知相关人员跟进
  • 离线/灰度/UAT环境:目前大部分在云环境上构建
  • 生产环境:云服务器环境,如何快速备份发布多个节点,发布成功的通知
  • 移动端:安卓、IOS打包后通知相关人员下载
  • Docker的构建、K8S构建等

在这里插入图片描述

参数化构建

背景:每次构建项目时都需要去修改一下配置,然后保存,再去立即构建。这样修改容易修改出错误,影响到执行脚本,且每次都要去修改配置,不容易修改,操作也比较麻烦。就像我们写固定代码一样,但有了参数后,代码的复用性大大提高,我们可以根据具体的参数做不同的操作,比如1是发布,2是回滚。

插件:Build with ParametersExtended Choice Parameter,默认已经安装

感谢大家的关注点赞,文章持续更新中…

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ctflq/article/details/122394636

智能推荐

java box类定义三变量_01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计...-程序员宅基地

文章浏览阅读2.3k次。01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积答:java.util.Scanner; public class Box { double length; double width; double height; //求体积 double volume(double length,double width,doubl..._编写一个立方体类,包含这样的属性:长度、宽度、高度等信息,通过方法来计算它的体

解决 - org.apache.ibatis.binding.BindingException: Type interface com.itheima.mapper.UserMapper...-程序员宅基地

文章浏览阅读1.3k次。org.apache.ibatis.binding.BindingException: Type interface com.itheima.mapper.UserMapper is not known to the MapperRegistry.该问题属于核心配置文件,加载映射文件报名写错,_org.apache.ibatis.binding.bindingexception: type interface com.itheima.mappe

用nodejs中html不显示css,Node.js 加载静态资源css,js等不显示问题的解决方法-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏9次。一,原因1,没有响应到css等文件2,响应类型是由文件的后缀名决定(1)html的请求头Content-Type : text/html ; charset=utf-8(2) CSS的请求头content-type:text/css; charset=utf-8(3)JavaScript的请求头content-type:text/javascrpt; charset=utf-8二,解决方法:(一)..._node.js打开网页不显示css,本地能显示

智慧校园全场景解决方案分析及方案架构_智慧校园中控架构开发软件有哪些-程序员宅基地

文章浏览阅读384次,点赞7次,收藏9次。智慧校园全场景解决方案是借助AIoT智能物联能力打造智慧绿色校园,助力实现校园周界安防、智慧通行、设备运维、能耗管理等场景功能智慧校园全场景解决方案,打造安全、便捷、绿色的智慧校园。_智慧校园中控架构开发软件有哪些

演示Win10输入法设置方法编程_win10 输入法 中英文模式api-程序员宅基地

文章浏览阅读82次。库,我们可以编写代码来模拟按键和鼠标操作,从而实现自动设置Windows 10的输入法。这种方法可以节省时间和精力,尤其是在需要频繁更改输入法设置的情况下。运行代码后,您将看到Windows 10的设置窗口打开,并自动导航到语言设置,然后将输入法更改为中文简体拼音。在本文中,我将向您展示如何使用编程方式来设置Windows 10的输入法。现在,我们已经编写了设置输入法的代码。保存代码文件,并在命令提示符或终端中运行它。库来模拟按下键盘快捷键,以设置输入法。一旦安装完成,我们可以开始编写代码。_win10 输入法 中英文模式api

女人手掌中间有条竖线_手心有一条竖线代表什么-程序员宅基地

文章浏览阅读1.5k次。每个人都有属于自己的手相,有些人的手相是属于典型的、一般的手相特征,没有太多值得说的地方;而另一些人,他们的手相之中,却有一些别人所没有的手相特征,但却真实的出现在了自己的手掌中。比如说,对于手心里有一条竖线的人,他们的命格会是怎样的呢?一起来手相图解看看吧!1、事业发展:前途坎坷对于手心有一条竖线的人,他们的事业线一定会因此而出现中断,与此相交。而在事业发展方面,事业线的分叉代表了遇到的困难程度..._女生右手手掌中间的竖线代表什么

随便推点

Web存储-程序员宅基地

文章浏览阅读566次。Cookie、WebStorage(localStorage,sessuonStorage)、Session、Token_web存储

IDEA启动报Failed to create JVM. JVM Path错问题解决_edit you jvm failed to jvm-程序员宅基地

文章浏览阅读2k次。所以我的配置在ja-netfilter-all/dea64.exe.vmoptions。我尝试把值改成默认值后。我记得我最近一次的正常打开,是因为使用IDEA的help重新设置了VM的内存大小。按照道理来说,修改idea64.exe.vmoptions的内容应该就可以还原回去了哈。3、打开idea64.exe.vmoptions文件,找个网上的配置,然后替换下重新启动。1、找到idea64.exe.vmoptions文件,然后删除,重启动。分析当前这个问题,应该是把值调的太大了,导致启动不起来的问题。..._edit you jvm failed to jvm

java虚拟机栈和本地方法栈_本地方法栈存放什么数据-程序员宅基地

文章浏览阅读803次。Java 内存可以粗糙的区分为堆内存(Heap)和栈内存 (Stack),其中栈就是现在说的虚拟机栈,或者说是虚拟机栈中局部变量表部分。new了一个class类的过程:往栈里丢了一个英文的名字,在堆里实例化了一个类,名字指向这个类。与程序计数器一样,Java 虚拟机栈也是线程私有的,它的生命周期和线程相同,描述的是。栈:栈内存,主管程序的运行,生命周期与线程同步。Java 栈可用类比数据结构中栈,Java 栈中保存的主要内容是栈帧,栈:8大基本数据类型,对象的引用,实例的方法。栈运行的原理:栈帧。_本地方法栈存放什么数据

Expression expected.Vetur(1109) 报错_ts1109: expression expected.-程序员宅基地

文章浏览阅读5.9k次。这里发现报错,关闭vscode重启也还是有问题。后面发现其实是typescript定义类型的语法,是因为我将代码写在<script></script>里面,使用ts语法需要表明lang="ts"即将代码写在<script lang="ts"></script>将不会报错..._ts1109: expression expected.

基于8ASK调制解调误码率matlab仿真_matlab ask-程序员宅基地

文章浏览阅读1k次,点赞23次,收藏22次。在数字通信系统中,幅度键控(ASK)是一种通过改变载波信号的幅度来传输数字信息的调制方式。8ASK,即8幅度键控,是ASK的一种变体,它使用8个不同的幅度级别来表示数字信息。8ASK (Amplitude Shift Keying) 调制是一种幅度移键调制技术,它通过改变载波信号的幅度来传输数据,同时保持频率和相位不变。在8ASK中,有8个不同的幅度级别,每个级别代表3比特的信息(因为2^3=8)。这种调制方式能够在相同的带宽条件下传输更多的数据,但与此同时,它对信号的幅度噪声也更加敏感。_matlab ask

推荐文章

热门文章

相关标签