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上,看到项目会自动构建