持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
持续集成(CI:Continous Intergration):频繁地(一天多次)将代码集成到主干
持续交付(CD:Continous Delivery)
持续部署(CD:Continous Deployment)
持续集成优点:
-
快速发现错误
每完成一点更新,就集成到对应的分支,可以快速发现错误,定位错误也比较容易
-
防止分支大幅度偏离主干
如果不是经常集成,分支或者主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
Jenkins安装的方式有很多种,这里主要介绍在Centos 7服务器上通过Docker和压缩包安装的两种方式,其他安装方式可以参考Jenkins官方文档。
Docker方式安装Jenkins
目前最便利的方式是通过docker方式去安装Jenkins,至于如何安装Dokcer可以参考文章# 【Docker】安装及基础用法(nginx容器为例)
下载jenkins镜像
官方推荐了两种镜像:jenkinsci/blueocean(中文文档)和jenkins/jenkins(英文文档)。前者主要是集成了blueocean插件,这个插件用来提供一个更美观的jenkinsUI,可以根据不同的需要使用不同的插件。 使用docker pull [镜像名]命令可以直接从docker仓库中拉取镜像。
在看英文文档之前,我一直不懂jenkinsci/blueocean和jenkins/jenkins的区别,后来切换到英文文档后,终于弄明白了这两个镜像的区别(强烈建议各位去看下英文文档)。同时对于在Docker安装的Jenkins中如何使用docker命令,官网中的中文文档和英文文档也分别给了两种方式。对这个如果感兴趣的话,可以参考文章# 在Jenkins官方文档中发现的"彩蛋"(Docker篇)
使用镜像来启动Jenkins容器
如果没有提前下载镜像,通过docker run命令启动容器的时候,也会自动去下载镜像。
- 创建网络用来进行容器间的通讯
docker network create jenkins
- 启动docker:dind容器用来在jenkins中调用docker命令
docker run --name jenkins-docker \
--rm \
-d \
--privileged \
--network jenkins \
--network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
-v jenkins-docker-certs:/certs/client \
-v jenkins-data:/var/jenkins_home \
-p 2376:2376 \
--storage-driver overlay2 \
docker:dind
- 启动jenkins容器
docker run --name jenkins-blueocean \
--rm \
-d \
--network jenkins \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v jenkins-docker-certs:/certs/client:ro
jenkinsci/blueocean:1.24.7
部分参数解析:
-
--rm 关闭容器时自动删除容器 等价于
docker stop [容器名] && docker rm [容器名] -
-d 后台运行
-
--name 指定容器的名称
-
-p 端口映射,第一个数字代表主机上的端口,而后一个代表容器的端口。
-
-v 指定挂载卷 即将docker容器中的内容挂载到宿主机上,避免因为容器删除而导致数据丢失的问题
8080端口:jenkins服务器的对外UI地址
50000端口:slave节点与jenkins通讯的端口
容器启动后,可以通过docker ps命令查看容器是否启动成功,如下:
压缩包方式安装Jenkins
Docker安装一时爽,事后构建火葬场。
使用Docker安装Jenkins少了很多安装环境的步骤,但是当Jenkins安装完成后,再进行其他项目的构建时,会发现该来的还是要来,该安装的还是要安装,且步骤更加麻烦,所以对于Docker不是很熟悉的同学,更推荐直接在宿主机上安装Jenkins。
写上面这段话的时候,我就是属于"对于Docker不是很熟悉的同学",虽然现在也是一知半解,但是随着安装卸载Jenkins次数变多之后,只想说"Docker真香",强烈建议大家采用Docker方式安装。
Java 环境安装(centos7)
-
安装之前先检查一下系统有没有自带open-jdk
命令:
rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj
如果没有输入信息表示没有安装。
如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件
-
官网下载Jdk安装包,centos7下推荐使用rpm包进行安装,不需要手动进行java环境配置
[root@localhost home]# rpm -ivh jdk-8u181-linux-x64.rpm 警告:jdk-8u181-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:jdk1.8-2000:1.8.0_181-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar... [root@localhost home]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode) [root@localhost home]#
Jenkins安装 (centos7)
-
下载jenkins rpm包 jenkins-2.275-1.1.noarch.rpm
-
安装jenkins
rpm -ivh jenkins-2.275-1.1.noarch.rpm
-
编辑jenkins配置文件
vi /etc/sysconfig/jenkins
#修改工作目录 JENKINS_HOME="/var/lib/jenkins" #修改用户名,切记要么修改为root,要么使用默认的,其他的需要修改权限后才能使用,否则报错 JENKINS_USER="root" #修改端口号 JENKINS_PORT="8080" #修改时区 ENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" -
配置jdk路径
通过命令
whereis java可以查看java命令的安装位置vi /etc/init.d/jenkins
在 candidates 后追加jdk 安装路径
-
启动jenkins
systemctl daemon-reload && systemctl start jenkins
安装验证
在浏览器中访问IP:8080打开jenkins页面,默认登录jenkins需要一段密码,这个密码保存在jenkins安装目录下的/secrets/initialAdminPassword文件中,读取这个文件有两种方法:
- 通过
docker exec -it jenkins /bin/bash进入容器终端,然后查看/var/jenkins_home下的/secrets/initialAdminPassword文件 - 因为已经将jenkins的安装目录挂载到宿主机的/home/jenkins_home上,因此也可以直接查看/home/jenkins_home下的
/secrets/initialAdminPassword文件 - 宿主机安装的方式可以直接查看该文件
输入正确的密码之后,就会进入到插件安装选择页面,如下:
推荐选择【选择插件安装】的方式,因为jenkins默认配置的插件下载地址下载插件是非常慢的,如果选择【安装推荐的插件】会在下载插件的页面卡很久,因此采用【选择插件安装】的方式,然后在插件选择页面不勾选任何插件,最后进入到jenkins页面中,选择【系统管理】-【插件管理】-【高级】就会在当前页面找到jenkins插件的下载地址,如下图
将网址中的https改为http,点击【提交】,此时再在插件管理页面根据需要下载对应的插件速度就会快很多。
Jenkins配置
安装完成后,新建一个自由项目,相关配置如下:
General 通用配置
-
丢弃旧的构建
随着jenkins上构建的项目越来越多,存在历史数据也会越来越多,因此需要对旧的构建进行清理。
源码管理
如果没安装任何源码管理插件,jenkins将没有任何选项,可以根据需要安装对应的源码管理插件,例如安装git插件后,配置如下:
构建触发器
用来配置该任务触发构建的条件,默认有四种触发构建的方式
Poll SCM和webhooks的区别
jenkins自带的Poll SCM机制,是按照给定的定时任务从Git中拉取代码,检查代码是否有更新,如果有更新就自动构建,是jenkins主动从GIt "拉" 代码;
webhooks是Git检查到代码变更的时候,根据配置的webhook连接主动 "推" jenkins,告知jenkins代码变更了需要重新拉取代码后构建。
构建环境
Build环境的一些参数
构建
真正的构建动作,一般来说,在Linux环境下构建一般是执行shell命令
构建后操作
当项目构建完成之后,可以进行很多的操作,例如报告的输出,邮件的发送,告警信息的发送等等,可以通过各种各样的插件来完成不同的功能。
完结,撒花~