Jenkins的入门以及安装的软件

Jenkins的应用场景
1、 一个自动构建过程, 从检出代码、 编译构建、 运行测试、 结果记录、 测试统计等都是自动完成
的, 无需人工干预。
2、一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般
使用SVN或Git。
3、一个持续集成服务器, Jenkins 就是一个配置简单和使用方便的持续集成服务器。
使用Jenkins的好处
1、降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
2、对系统健康持续检查,减少发布风险带来的问题;
3、减少重复性工作;
4、持续部署,提供可部署单元包;
5、持续交付可供使用的版本;
6、增强团队信心;
Jenkins介绍
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动
化构建、测试和部署等功能。官网: http://jenkins-ci.org/。
一、Jenkins的特征

  • 开源的Java语言开发持续集成工具,支持持续集成,持续部署。

  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可 方便

  • web界面配置管理。

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

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

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

  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,
    docker等。
    二、Jenkins安装和持续集成环境配置
    持续集成流程说明
    在这里插入图片描述
    1)首先,开发人员每天进行代码提交,提交到Git仓库
    2)然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK,
    Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新
    再执行一次整个流程。
    3)最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问
    应用。
    三、服务器列表以及安装对应的服务器安装软件

在这里插入图片描述
四、Gitlab代码托管服务器安装
Gitlab简介
在这里插入图片描述
官网: https://about.gitlab.com/
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的
web服务。
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,
可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器
上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放
在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
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
    安装:
    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.66.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
    Jenkins安装
    1)安装JDK
    Jenkins需要依赖JDK,所以先安装JDK1.8
    yum install java-1.8.0-openjdk* -y
    安装目录为:/usr/lib/jvm
    2)获取jenkins安装包
    下载页面:https://jenkins.io/zh/download/
    安装文件:jenkins-2.190.3-1.1.noarch.rpm
    3)把安装包上传到192.168.66.101服务器,进行安装
    rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
    4)修改Jenkins配置
    vi /etc/syscofig/jenkins
    修改内容如下:
    JENKINS_USER=“root”
    JENKINS_PORT=“8888”
    5)启动Jenkins
    systemctl start jenkins
    6)打开浏览器访问
    http://192.168.66.101:8888
    注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
    7)获取并输入admin账户密码
    cat /var/lib/jenkins/secrets/initialAdminPassword 8)跳过插件安装
    因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安

    在这里插入图片描述
    在这里插入图片描述
    点击安装

9)添加一个管理员账户,并进入Jenkins后台
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Jenkins的所有插件安装
下载中文汉化插件:"Chinese
Jenkins用户权限管理:Role-based Authorization Strategy
Jenkins凭证管理:Credentials Binding
Git插件安装:git
流水线项目Pipeline插件安装:Pipeline
构建器Gitlab Hook:Gitlab Hook,GitLab
代码审查SonarQube Scanner:SonarQube Scanner
Jenkins构建的项目类型介绍
Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven项目(Maven Project)
  • 流水线项目(Pipeline Project)
    每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在
    实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
    Pipeline简介
    1)概念
    Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点
    的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
    2)使用Pipeline有以下好处(来自翻译自官方文档):
    代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流
    程。 持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。 可停止:Pipeline可接
    收交互式输入,以确定是否继续执行Pipeline。 多功能:Pipeline支持现实世界中复杂的持续交付要
    求。它支持fork/join、循环执行,并行执行任务的功能。 可扩展:Pipeline插件支持其DSL的自定义扩
    展 ,以及与其他插件集成的多个选项。
    3)如何创建 Jenkins Pipeline呢?
    Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
    Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
    Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一
    个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)
    中直接载入 Jenkinsfile Pipeline 这种方法)。
    Jenkins构建的项目常用的构建触发器
    Jenkins内置4种构建触发器:
  • 触发远程构建
  • 其他工程构建后触发(Build after other projects are build)
  • 定时构建(Build periodically)
  • 轮询SCM(Poll SCM)(常用的触发器)
注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用,所以推荐Git hook。

Git hook自动触发构建(*)
刚才我们看到在Jenkins的内置构建触发器中,轮询SCM可以实现Gitlab代码更新,项目自动构建,但是
该方案的性能不佳。那有没有更好的方案呢? 有的。就是利用Gitlab的webhook实现代码push到仓
库,立即触发项目自动构建。
Jenkins的参数化构建
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时
我们可以使用参数化构建。
Jenkins支持非常丰富的参数类型
在这里插入图片描述

Maven安装和配置
在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
1.安装Maven
tar -xzf apache-maven-3.6.2-bin.tar.gz 解压
mkdir -p /opt/maven 创建目录
mv apache-maven-3.6.2/* /opt/maven 移动文件
2.配置环境变量
vi /etc/profile
source /etc/profile 配置生效
mvn -v 查找Maven版本
Tomcat安装和配置
安装Tomcat8.5
把Tomcat压缩包上传到192.168.66.102服务器
yum install java-1.8.0-openjdk* -y 安装JDK(已完成)
tar -xzf apache-tomcat-8.5.47.tar.gz 解压
mkdir -p /opt/tomcat 创建目录
mv /root/apache-tomcat-8.5.47/* /opt/tomcat 移动文件
/opt/tomcat/bin/startup.sh 启动tomcat
注意:服务器已经关闭了防火墙,所以可以直接访问Tomcat啦
地址为:http://192.168.66.102/8080
在这里插入图片描述
安装SonarQube
SonaQube简介
在这里插入图片描述
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前
支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检
测。
官网:https://www.sonarqube.org/
在这里插入图片描述

安装SonarQube
1)安装MySQL(已完成)
2)安装SonarQube
在MySQL创建sonar数据库
在这里插入图片描述
下载sonar压缩包:
https://www.sonarqube.org/downloads/
解压sonar,并设置权限
yum install unzip
unzip sonarqube-6.7.4.zip 解压
mkdir /opt/sonar 创建目录
mv sonarqube-6.7.4/* /opt/sonar 移动文件
useradd sonar 创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar. /opt/sonar 更改sonar目录及文件权限
修改sonar配置文件
vi /opt/sonarqube-6.7.4/conf/sonar.properties
内容如下:
sonar.jdbc.username=root sonar.jdbc.password=Root@123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?
useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=
maxPerformance&useSSL=false
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。
启动sonar
cd /opt/sonarqube-6.7.4
su sonar ./bin/linux-x86-64/sonar.sh start 启动
su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop 停止
tail -f logs/sonar.logs 查看日志
访问sonar
http://192.168.66.101:9000

在这里插入图片描述
默认账户:admin/admin
四、Jenkins+Docker+SpringCloud微服务持续集成
Jenkins+Docker+SpringCloud单个持续集成流程说明
在这里插入图片描述
Jenkins+Docker+SpringCloud集群部署流程说明

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

大致流程说明:
1)开发人员每天把代码提交到Gitlab代码仓库
2)Jenkins从Gitlab中拉取项目源码,编译并打成jar包,然后构建成Docker镜像,将镜像上传到
Harbor私有仓库。
3)Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉取镜像到本地,然后创建容器。
4)最后,用户可以访问到容器
在这里插入图片描述
安装Docker
Docker简介
在这里插入图片描述
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流
行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销
极低。
简单一句话总结:Docker技术就是让我们更加高效轻松地将任何应用在Linux服务器部署和使用。

1)卸载旧版本
yum list installed | grep docker 列出当前所有docker的包
yum -y remove docker的包名称 卸载docker包
rm -rf /var/lib/docker 删除docker的所有镜像和容器
2)安装必要的软件包
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
3)设置下载的镜像仓库
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/dockerce.repo
4)列出需要安装的版本列表
yum list docker-ce --showduplicates | sort -r
5)安装指定版本(这里使用18.0.1版本)
sudo yum install docker-ce-18.06.1.ce
6)查看版本
docker -v
7)启动Docker
sudo systemctl start docker 启动
sudo systemctl enable docker 设置开机启动
8)添加阿里云镜像下载地址
vi /etc/docker/daemon.json
内容如下:

{"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"] }

9)重启Docker
sudo systemctl restart docker

Harbor镜像仓库安装及使用
Harbor简介
在这里插入图片描述
Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。
除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很
多优势:

  1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以
    用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定
    传输的对象。
  2. 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界
    面可以支持登陆、搜索功能,包括区分公有、私有镜像。
  3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分
    解。
  4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,
    具有更好的安全性。

Harbor需要安装在192.168.66.102上面
1)先安装Docker并启动Docker(已完成)
参考之前的安装过程
2)先安装docker-compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker- compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

3)给docker-compose添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
4)查看docker-compose是否安装成功
docker-compose -version
5)下载Harbor的压缩包(本课程版本为:v1.9.2)
https://github.com/goharbor/harbor/releases
6)上传压缩包到linux,并解压
tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor
7)修改Harbor的配置
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker- compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
vi harbor.yml
修改hostname和port
hostname: 192.168.66.102
port: 85
8)安装Harbor
./prepare
./install.sh
9)启动Harbor
docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动
10)访问Harbor
http://192.168.66.102:85
默认账户密码:admin/Harbor12345

五、基于Kubernetes/K8S构建Jenkins持续集成平台
Jenkins的Master-Slave分布式构建
什么是Master-Slave分布式构建

Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节
点的压力,而且可以同时构建多个,有点类似负载均衡的概念。
传统Jenkins的Master-Slave方案的缺陷

  • Master节点发生单点故障时,整个流程都不可用了
  • 每个Slave节点的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导 致管理起来非常不方便,维护 起来也是比较费劲
  • 资源分配不均衡,有的 Slave节点要运行的job出现排队等待,而有的Slave节点处于空闲状态
  • 资源浪费,每台Slave节点可能是实体机或者VM,当Slave节点处于空闲状态时,也不会完全释放 掉资源

以上种种问题,我们可以引入Kubernates来解决!
Kubernates简介
Kubernetes(简称,K8S)是Google开源的容器集群管理系统,在Docker技术的基础上,为容器化的
应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的
便捷性。 其主要功能如下:

  • 使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。
  • 以集群的方式运行、管理跨机器的容器。以集群的方式运行、管理跨机器的容器。
  • 解决Docker跨机器容器之间的通讯问题。解决Docker跨机器容器之间的通讯问题。
  • Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。

Kubernates+Docker+Jenkins持续集成架构图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大致工作流程:手动/自动构建 -> Jenkins 调度 K8S API ->动态生成 Jenkins Slave pod -> Slave pod
拉取 Git 代码/编译/打包镜像 ->推送到镜像仓库 Harbor -> Slave 工作完成,Pod 自动销毁 ->部署
到测试或生产 Kubernetes平台。(完全自动化,无需人工干预)
Kubernates+Docker+Jenkins持续集成方案好处

  • 服务高可用:当 Jenkins Master 出现故障时,Kubernetes 会自动创建一个新的 Jenkins Master
    容器,并且将 Volume 分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。
  • 动态伸缩,合理使用资源:每次运行 Job 时,会自动创建一个 Jenkins Slave,Job 完成后,Slave
    自动注销并删除容器,资源自动释放,而且 Kubernetes 会根据每个资源的使用情况,动态分配
    Slave 到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待在该节点的情况。
  • 扩展性好:当 Kubernetes 集群的资源严重不足而导致 Job 排队等待时,可以很容易的添加一个
    Kubernetes Node 到集群中,从而实现扩展。

Kubeadm安装Kubernetes
Kubernetes的架构

在这里插入图片描述
API Server:用于暴露Kubernetes API,任何资源的请求的调用操作都是通过kube-apiserver提供的接
口进行的。
Etcd:是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计
划。
Controller-Manager:作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点
(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额
(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化
修复流程,确保集群始终处于预期的工作状态。
Scheduler:监视新创建没有分配到Node的Pod,为Pod选择一个Node。
Kubelet:负责维护容器的生命周期,同时负责Volume和网络的管理
Kube proxy:是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通
信与负载均衡机制的重要组件。

安装环境说明
在这里插入图片描述
三台机器都需要完成
修改三台机器的hostname及hosts文件

hostnamectl set-hostname k8s-master 
hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2
cat >>/etc/hosts<<EOF 192.168.66.101 k8s-master 192.168.66.103 k8s-node1
192.168.66.104 k8s-node2 EOF

关闭防火墙和关闭SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0 临时关闭
vi /etc/sysconfig/selinux 永久关闭

改为SELINUX=disabled
设置系统参数
设置允许路由转发,不对bridge的数据进行处理
创建文件

vi /etc/sysctl.d/k8s.conf
内容如下:
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 vm.swappiness = 0

执行文件

sysctl -p /etc/sysctl.d/k8s.conf

kube-proxy开启ipvs的前置条件

cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

所有节点关闭swap

swapoff -a 临时关闭
vi /etc/fstab 永久关闭
注释掉以下字段
/dev/mapper/cl-swap swap swap defaults 0 0

安装kubelet、kubeadm、kubectl

  • kubeadm: 用来初始化集群的指令。
  • kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。
  • kubectl: 用来与集群通信的命令行工具

清空yum缓存

yum clean all

设置yum安装源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

安装:

yum install -y kubelet kubeadm kubectl

kubelet设置开机启动(注意:先不启动,现在启动的话会报错)
systemctl enable kubelet
查看版本
kubelet --version

kubectl常用命令

kubectl get nodes 查看所有主从节点的状态 
kubectl get ns 获取所有namespace资源 
kubectl get pods -n {$nameSpace} 获取指定namespace的pod 
kubectl describe pod的名称 -n {$nameSpace} 查看某个pod的执行过程 
kubectl logs --tail=1000 pod的名称 | less 查看日志 
kubectl create -f xxx.yml 通过配置文件创建一个集群资源对象 
kubectl delete -f xxx.yml 通过配置文件删除一个集群资源对象 
kubectl delete pod名称 -n {$nameSpace} 通过pod删除集群资源 
kubectl get service -n {$nameSpace} 查看pod的service情况
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan丶K

各位技术大佬,小弟敲字不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值