Jenkins持续集成

一. 持续集成概念

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

1.1 什么是持续集成:

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

1.2 什么是持续交付:

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

1.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/

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插件。

[root@jenkins ~]# docker  pull jenkinsci/blueocean:1.22.0

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

2.2.3 启动镜像

[root@jenkins ~]# docker run -d  -u root  --restart always \
> -p 8080:8080  -p 50000:50000  \
> -v jenkins-data:/var/jenkins_home \
> -v /var/run/docker.sock:/var/run/docker.sock \
> --privileged \
> --name jenkins-server \
> jenkinsci/blueocean:1.22.0

##防火墙放行端口
[root@jenkins ~]# firewall-cmd --add-port=8080/tcp --permanent 
[root@jenkins ~]# firewall-cmd --add-port=50000/tcp --permanent 
[root@jenkins ~]# firewall-cmd --reload 
success

2.2.4 安装后设置向导

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

解锁 Jenkins

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

[root@jenkins ~]# docker logs jenkins-server
...略...
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

7bac3cf6496541e9b3bba62ceac51489  #这个就是解锁密码

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
...略...

安装插件

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

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

创建第一个管理员用户

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

2.3 jenkins基础功能

2.3.1 新建项目

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

2.3.2 用户界面

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

2.3.3 构建历史

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

2.3.4 系统管理

存放Jenkins的所有配置

2.3.5 我的视图:

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

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

2.4.1 安装插件

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

2.4.2 gitlab创建项目

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

2.4.3 建立一对公私密钥对

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

[root@jenkins ~]# docker exec -it jenkins-server /bin/bash
bash-4.4# su - jenkins
4e19b74d4df8:~$ whoami
jenkins
4e19b74d4df8:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa.
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mOye2eu7xsarsiaA+cy2pvbPccXKKL1UjXPKGD62frs jenkins@4e19b74d4df8
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|     . o+        |
|..   .++S=       |
|+   o.B *        |
| = . X.O         |
| .B B.*==        |
|o+o=+O*EX=       |
+----[SHA256]-----+
4e19b74d4df8:~$ ls /var/jenkins_home/.ssh/
id_rsa	id_rsa.pub
2.4.4 上传刚生成的公钥

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

2.4.5 将私钥添加到jenkins上

选择添加证书

2.4.6 在jenkins上创建任务

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

添加项目描述:
添加项目仓库地址

查看gitlab版本,版本只支持2位
[root@git test-dev]# docker exec -it gitlab cat /opt/gitlab/version-manifest.json | grep build_version
  "build_version": "12.8.1",
2.4.7 测试构建
点击立即构建,可以看到构建过程
构建完成后选择console output,可以看到构建是成功的。

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 配置构建触发器

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

2.4.2 gitlab配置Hook

选择项目–>设置–>集成

SSL验证要记得取消

如果出现以下错误

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

添加完成可以测试

测试成功:

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