跳转至

06-jenkins服务部署

简单介绍

Jenkins 介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有

Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson

Jenkins官网:https://jenkins.io/

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle

Jenkins官网文档:https://www.jenkins.io/zh/doc/

CI/CD是什么

CI / CD的采用改变了开发人员和测试人员如何发布软件。

image-20220122192640511

最初是**瀑布模型**,后来是**敏捷开发**,现在是**DevOps**,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了**持续集成(Continuous Integration)、**持续交付(Continuous Delivery)持续部署(Continuous Deployment) 的新方法。传统的软件开发和交付方法正在迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署/发布软件。然而,现在,在DevOps时代,每周,每天,甚至每天多次是常态。当SaaS正在占领世界时,尤其如此,您可以轻松地动态更新应用程序,而无需强迫客户下载新组件。很多时候,他们甚至都不会意识到正在发生变化。开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,大多数团队都有自动化流程来检查代码并部署到新环境。今天,我们将介绍什么是CI / CD / CD,以及现代软件公司如何使用工具将部署代码的流程自动化。

**持续集成**的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 **持续交付**的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 **持续部署**是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。

这些阶段中的每一个都是交付管道的一部分 。在Humble和Farley的书《持续交付:可靠的软件版本中,通过构建,测试和部署自动化》,解释“对软件的每次更改,都会在发布过程中经历一个复杂的过程。该过程涉及构建软件,然后通过多个测试和部署阶段进行这些构建。反过来,这需要许多人之间的合作,也许需要几个团队之间的合作。部署管道对此过程进行建模,并且它在持续集成和发布管理工具中的实现,使您能够在从版本控制转移到各种测试和部署,以向用户发布时查看和控制每个更改的进度。

持续集成(CI)

通过持续集成,开发人员能够频繁将其代码集成到公共代码仓库的主分支中。开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。 这里的一个重要想法是让开发人员更快,更频繁地做到这一点,从而降低集成成本。实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。当然,还有一些权衡。此流程变更不提供任何额外的质量保证。实际上,许多组织发现这种集成变得更加昂贵,因为它们依赖于手动过程来确保新代码不会引入新的错误,并且不会破坏现有代码。为了减少集成任务期间的摩擦,持续集成依赖于测试套件和自动化测试执行。然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。 CI 的目标是将集成简化成一个简单、易于重复的日常开发任务,这将有助于降低总体构建成本,并在周期的早期发现缺陷。要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建,并且在发现 bug 的早期积极解决。

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。

image-20220122165226849

持续交付(CD)

实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统,可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试,并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中。这是一个整体的过程,因为构建、部署和环境都是一起执行和测试的,它能让构建在实际的生产环境可部署和可验证。 AWS上提供了现代CI / CD管道的可靠展示。亚马逊是云计算提供商之一,提供令人印象深刻的CI / CD 管道环境,并提供一个演练过程,您可以从其中选择众多开发资源,并将它们链接在一个易于配置且易于监控的管道中。

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

image-20220122165245131

持续部署(CD)

持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。在这样的流程中,不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。 采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现。这些工具通常能与各种开发工具配合,包括像 GitHub 这样的代码仓库和 Jira 这样的 bug 跟踪工具。此外,随着 SaaS 这种交付方式变得更受欢迎,许多工具都可以在现代开发人员运行应用程序的云环境中运行,例如 GCP 和 AWS。最受欢迎的自动化工具是 Jenkins(以前的 Hudson),这是一个由数百名贡献者和商业公司 Cloudbees 支持的开源项目。Cloudbees 甚至聘请了 Jenkins 的创始人,并提供了一些 Jenkins 培训项目和附加组件。除了开源项目之外,还有一些更现代化的商业产品例如 CircleCI,Codeship 和 Shippable。这些产品各有优缺点,我鼓励开发人员在开发流程中一一尝试它们,以了解它们在您的环境中的工作方式,以及它们如何与您的工具、云平台、容器系统等协作。

下一步是什么

一旦部署了现代化的 CI/CD 流水线,您可能会意识到开发人员工作流程中的一些工具和流程也需要进行现代化改造。测试是一个要着重关注的领域,如果您的部署频率是每天或者一天多次,您的每次测试可能需要数小时甚至一晚上才能完成。mabl 正在使用机器学习解决这个问题。

推荐学习网站

jenkins学习文档

https://www.w3cschool.cn/jenkins/jenkins-5h3228n2.html

安装部署

配置基础的yum仓库

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all
yum repolist

开始安装JDK

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

yum install -y java-1.8.0 git vim

配置jenkins yum仓库(国外的访问很慢)

cd /etc/yum.repos.d/
wget http://pkg.jenkins.io/redhat/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key

快速安装jenkins

yum -y install wget
wget http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.289-1.1.noarch.rpm
yum -y localinstall jenkins-2.289-1.1.noarch.rpm

#本文使用yum进行安装,大家也可以使用编译安装。
其他版本下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

配置国内的插件源

vim /var/lib/jenkins/hudson.model.UpdateCenter.xml

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

配置启动

systemctl start jenkins
/sbin/chkconfig jenkins on

访问界面

新版本的jenkins为了保证安全,在安装之后有一个锁,需要设置密码之后才可以解锁

Jenkins Web访问地址:192.168.56.11:8080

友情提示:jenkins如果跟gitlab在一台服务器需要将jenkins的端口进行修改,需要将jenkins的**8080**修改为**8081**

image-20211028161804936

[root@linux-node1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
490a2f35a2df49b6b8787ecb27122a3a

复制这个文件下面的ID,否则不可以进行安装。

我们选择推荐安装即可

image-20211028161830593

它会给我们安装一些基础的插件

image-20211028161843313

image-20220122212440191

设置密码

设置用户名密码:

image-20211028161930146

点击保存并退出

image-20211028161944674

​ 早期jenkins默认是不需要登陆的

image-20211028162002073

设置中文

设置插件国内源

Jenkins 插件源默认连接的是 Jenkins 自己的服务器,如果小伙伴们连接外网的速度不够好, 就容易出现下载插件失败的问题:

image-20220122191219911

如何解决这个问题呢? 我们可以把插件源更换成国内的网速比较快的,这样下载延时小,成功率会高很多。

我们选择中国地区的:Tsinghua Open Source Mirror

进入站点,找到 updates

image-20220122191251425

我们需要的就是这个更新文件,点进去看看

image-20220122191304938

把 Url 复制一下,https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 就是我们将要更新的 Ulr

image-20220122191321300

更换插件镜像源

路径:系统管理 ->插件管理 ->高级 ->更新站点

先切换到高级标签

image-20220122191344575

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

再把原来的更新站点替换掉

点击 submit,这样插件源就更新了

再次找插件进行安装测试,发现可以顺利的安装了。

安装插件Locale

主界面 -> 系统管理 -> 插件管理 -> 可选插件

1.1 安装插件Locale plugin,

image-20220122175015211

1.2 安装插件Localization: Chinese(Simplified)

image-20220122180307520

系统管理 -> 系统设置 -> Locale

image-20220122180146947

若修改为中文简体,Default Language设置为:

zh_cn

若修改为中文繁体,Default Language设置为:

zh_tw

若要修改回英文,Default Language设置为:

en_us

勾选:"Ignore browser preference and force this language to all users" 并保存。

需要重启一下jenkins

http://192.168.1.117:8080/restart


jenkins关闭,重启几种方式
https://www.cnblogs.com/ninefish/p/9816612.html

点击yes重启jenkins

image-20220122175620376

首页语言显示效果如下:

image-20220122180637897

插件管理

插件管理界面

Jenkins系统管理比较重要的就是插件管理

image-20211028162140890

#因为jenkins所有的东西都需要靠插件来完成,

点击已安装可以查看我们的安装

image-20211028162206370

我们想安装什么插件,我们可以选择可选插件

image-20211028162220461

我们为了和gitlab和在一起,我们需要安装一个插件

image-20211028162232767

image-20211028162242486

安装插件BlueOcean

主界面 -> 系统管理 -> 插件管理 -> 可选插件

image-20220122180822434

开始安装中

image-20220122180850666

安装都完成后开始重启jenkins

image-20220122182838288

重启完毕后,打开首页,找到blueocean

image-20220122182950006

打开blueocean

image-20220122183023625

安装完毕

安装插件Gitlab

主界面 -> 系统管理 -> 插件管理 -> 可选插件

image-20220122185013393

开始安装中,重启jenkins

image-20220122185036027

重启中

image-20220122185053688

重启完毕后插件安装完毕

离线上传插件

查看还可以去jenkins官网下载,然后上传插件

image-20211028162255708

因为很多插件需要翻墙才可以继续下载,jenkins还提供了代理的设置

还是在服务器目录下进行上传插件
目录路径= /var/lib/jenkins/plugins/
这个目录下是我们安装所有的插件

常用插件

Jenkins插件大全及用途简介

https://blog.csdn.net/pansaky/article/details/80755739

对接ldap

配置openldap_jenkins接入openldap用户认证

https://blog.csdn.net/weixin_35943736/article/details/112069767

安装LDAP插件

主界面 -> 系统管理 -> 插件管理 -> 可选插件

image-20220122183342138

重启服务生效

image-20220122183513805

配置LDAP设置

首先管理员登陆→全局安全配置

Server:x.x.x.x:389  (不需要带ldap://)root DN:置空User search base:dc=xx,dc=xx(#和自己的openldap设置是一样的)
User search filter:uid={0} (#这个是默认的值)Group search base:dc=xx,dc=xx(#和自己的openldap设置是一样的)
Group search filter:置空Group membership:Search for LDAP groups containing user Group membership filter(值为空就可以)
Manager DN:cn=admin,dc=xx,dc=xxManager Password:xxxx(管理员的密码)Display Name LDAP attribute:uidEmail Address LDAP attribute:mail

选择ldap

image-20220122183613476

设置ldap

image-20220122184138902

image-20220122184158339

验证LDAP用户

测试ldap用户

image-20220122184231329

验证用户是否正确

image-20220122184249004

使用ldap用户登录jenkins

image-20220122184315672

登录成功后的界面

image-20220122184343590

流水线操作

创建普通流水线

创建pepline流水线

新建任务

image-20220318154052510

选择流水线

image-20220318154150253

输入流水线代码,点击保存

image-20220318154259012

pipeline {
    agent {
        node {
            label """master"""
        }

    }
    stages {
        stage('开始拉取代码'){
            steps{
                git branch: 'main', credentialsId: '52f9d715-b003-4f5a-bf7b-aa38b1767d4b', url: 'http://192.168.1.106/zhangsan/demo.git'
              }

        }
        stage('执行测试命令'){
            steps{
              sh """
                    hostname
                    lsblk
                """
            }
        }
    }
}

点击 立即构建

image-20220318154324173

成功构建结果如下:

image-20220318155323342

常用链接

为什么要更换插件源
https://zhuanlan.zhihu.com/p/133406941

jenkins转换显示语言为中文简体(jenkins汉化)
https://blog.csdn.net/w294954902/article/details/82587295

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json