Jenkins持续集成

导读:本篇文章讲解 Jenkins持续集成,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Jenkins持续集成

视频地址: 笔记参考:

Linux虚拟机安装

资源下载地址 链接: 提取码:wiih

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

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,上传至linux并解压 链接: 提取码: bq6s
	#解压下载的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用户

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

  • 使用新密码登录即

常用插件安装

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
  • 启动应用

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 admin@192.168.1.2:/home/admin/.ssh/authorized_keys
  scp -p ~/.ssh/id_rsa.pub root@101.200.192.105:/home/admin/.ssh/authorized_keys

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

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

# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh admin@101.200.192.105
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,默认已经安装

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1429.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!