Jenkins持续集成

一. 持续集成概念

  • 持续集成Continuous Integration
  • 持续交付Continuous Delivery
  • 持续部署Continuous Deployment

1.1 什么是持续集成:

持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进行自动化测试。

3. Jenkins持续集成 - 图1

1.2 什么是持续交付:

持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境。

3. Jenkins持续集成 - 图2

1.3 持续部署:

在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。

3. Jenkins持续集成 - 图3

1.4 自动化运维之DevOps

DevOps(英文Development(开发)和Operations(技术运营)的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作;

简单的来说DevOps是一种文化,是让开发、运维、测试能够之间沟通和交流;

自动化运维工具:saltstack、jenkins等。因为他们的目标一样,为了我们的软件、构建、测试、发布更加的敏捷、频繁、可靠。

如果运维对git不熟,是无法做自动化部署。因为所有的项目都受制于开发。

二. Jenkins

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

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

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

3. Jenkins持续集成 - 图4

2.1 Jenkins特点

持续集成和持续交付

作为一个可扩展的自动化服务器,Jenkins可以用作简单的CI服务器,或者变成任何项目的持续交付中心。

简易安装

Jenkins 是一个基于 Java 的独立程序,可以在很多环境中运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。

配置简单

Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。

强大插件

通过更新中心中的 1000多个插件,Jenkins 集成了持续集成和持续交付工具链中几乎所有的工具。

可扩展性

Jenkins 可以通过其插件架构进行扩展,从而为 Jenkins 可以做的事提供几乎无限的可能性。

分布式

Jenkins 可以轻松地在多台机器上分配工作,帮助更快速地跨多个平台推动构建、测试和部署。

2.2 安装Jenkins

官方安装:https://jenkins.io/zh/doc/book/installing/

下面使用docker来安装jenkins。

2.2.1 安装docker(略)

2.2.2 拉取镜像

建议使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。

  1. [root@jenkins ~]# docker pull jenkinsci/blueocean:1.22.0
  2. [root@jenkins ~]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. jenkinsci/blueocean 1.22.0 d941c4468e17 2 days ago 560MB

2.2.3 启动镜像

  1. [root@jenkins ~]# docker run -d -u root --restart always \
  2. > -p 8080:8080 -p 50000:50000 \
  3. > -v jenkins-data:/var/jenkins_home \
  4. > -v /var/run/docker.sock:/var/run/docker.sock \
  5. > --privileged \
  6. > --name jenkins-server \
  7. > jenkinsci/blueocean:1.22.0
  8. ##防火墙放行端口
  9. [root@jenkins ~]# firewall-cmd --add-port=8080/tcp --permanent
  10. [root@jenkins ~]# firewall-cmd --add-port=50000/tcp --permanent
  11. [root@jenkins ~]# firewall-cmd --reload
  12. success

2.2.4 安装后设置向导

此安装向导会引导您完成几个快速“一次性”步骤来解锁Jenkins, 使用插件对其进行自定义,并创建第一个可以继续访问Jenkins的管理员用户。

解锁 Jenkins

当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。

  1. [root@jenkins ~]# docker logs jenkins-server
  2. ...略...
  3. Jenkins initial setup is required. An admin user has been created and a password generated.
  4. Please use the following password to proceed to installation:
  5. 7bac3cf6496541e9b3bba62ceac51489 #这个就是解锁密码
  6. This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
  7. ...略...

3. Jenkins持续集成 - 图5

安装插件

可以自定义安装插件,也可以安装推荐的插件。此过程需要一段时间,而且根据网络不同有些插件安装不成功,但是之后可以自己再安装即可。

  • 安装建议的插件 - 安装推荐的一组插件,这些插件基于最常见的用例.
  • 选择要安装的插件 - 选择安装的插件集。当你第一次访问插件选择页面时,默认选择建议的插件。

3. Jenkins持续集成 - 图6

创建第一个管理员用户

3. Jenkins持续集成 - 图7

Jenkins要求您创建第一个管理员用户,创建完成后,当“Jenkins已就绪” 出现时,单击“开始使用 Jenkins”。

2.3 jenkins基础功能

2.3.1 新建项目

点击新建,这里就是构建一个项目

3. Jenkins持续集成 - 图8

2.3.2 用户界面

主要是用户的管理,可以看到当前登录用户及用户权限信息

3. Jenkins持续集成 - 图9

2.3.3 构建历史

可以看到所有构建过的项目的历史

3. Jenkins持续集成 - 图10

2.3.4 系统管理

存放Jenkins的所有配置

3. Jenkins持续集成 - 图11

2.3.5 我的视图:

视图功能,可以自己创建一个自己的视图

3. Jenkins持续集成 - 图12

2.4 任务一:配置jenkins从Gitlab获取代码

2.4.1 安装插件

为了和gitlab一起工作,需要安装插件

3. Jenkins持续集成 - 图13

2.4.2 gitlab创建项目

在gitlab上创建一个项目:python-dev,属于development组,并建立develop分支

3. Jenkins持续集成 - 图14

2.4.3 建立一对公私密钥对

使用jenkens用户,在jinkins服务器上产生

  1. [root@jenkins ~]# docker exec -it jenkins-server /bin/bash
  2. bash-4.4# su - jenkins
  3. 4e19b74d4df8:~$ whoami
  4. jenkins
  5. 4e19b74d4df8:~$ ssh-keygen -t rsa
  6. Generating public/private rsa key pair.
  7. Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa):
  8. Created directory '/var/jenkins_home/.ssh'.
  9. Enter passphrase (empty for no passphrase):
  10. Enter same passphrase again:
  11. Your identification has been saved in /var/jenkins_home/.ssh/id_rsa.
  12. Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub.
  13. The key fingerprint is:
  14. SHA256:mOye2eu7xsarsiaA+cy2pvbPccXKKL1UjXPKGD62frs jenkins@4e19b74d4df8
  15. The key's randomart image is:
  16. +---[RSA 2048]----+
  17. | |
  18. | |
  19. | |
  20. | . o+ |
  21. |.. .++S= |
  22. |+ o.B * |
  23. | = . X.O |
  24. | .B B.*== |
  25. |o+o=+O*EX= |
  26. +----[SHA256]-----+
  27. 4e19b74d4df8:~$ ls /var/jenkins_home/.ssh/
  28. id_rsa id_rsa.pub

2.4.4 上传刚生成的公钥

将公钥添加到gitlab服务器上,使用gitlab管理员登录。

3. Jenkins持续集成 - 图15

2.4.5 将私钥添加到jenkins上

3. Jenkins持续集成 - 图16

选择添加证书

3. Jenkins持续集成 - 图17

2.4.6 在jenkins上创建任务

–> 构建一个自由风格的软件项目

3. Jenkins持续集成 - 图18

添加项目描述:

添加项目仓库地址

3. Jenkins持续集成 - 图19

查看gitlab版本,版本只支持2位
  1. [root@git test-dev]# docker exec -it gitlab cat /opt/gitlab/version-manifest.json | grep build_version
  2. "build_version": "12.8.1",

2.4.7 测试构建

点击立即构建,可以看到构建过程

构建完成后选择console output,可以看到构建是成功的。

3. Jenkins持续集成 - 图20

2.4 任务二:配置Gitlab Hook

Jenkins + gitlab 集成后,实现的功能是:开发写好代码提交至gitlab上,当新代码push到gitlab上之后,jenkins自动帮我们立即构建。

需要添加的插件
  • Gitlab Hook
  • Build Authorization Token Root
  • Publish Over SSH
  • Gitlab Authentication
  • Gitlab
  • Git Parameter

2.4.1 配置构建触发器

项目–>配置–>构建触发器

3. Jenkins持续集成 - 图21

2.4.2 gitlab配置Hook

选择项目–>设置–>集成
3. Jenkins持续集成 - 图22

SSL验证要记得取消

如果出现以下错误

  1. Url is blocked: Requests to the local network are not allowed

3. Jenkins持续集成 - 图23

添加完成可以测试

3. Jenkins持续集成 - 图24

测试成功:

3. Jenkins持续集成 - 图25

可以到Jenkins上,看到项目会自动构建
image.png