【Jenkins】安装与配置

757 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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命令查看容器是否启动成功,如下:

image-20210210112218617

压缩包方式安装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文件中,读取这个文件有两种方法:

  1. 通过docker exec -it jenkins /bin/bash进入容器终端,然后查看/var/jenkins_home下的/secrets/initialAdminPassword文件
  2. 因为已经将jenkins的安装目录挂载到宿主机的/home/jenkins_home上,因此也可以直接查看/home/jenkins_home下的/secrets/initialAdminPassword文件
  3. 宿主机安装的方式可以直接查看该文件

输入正确的密码之后,就会进入到插件安装选择页面,如下:

image-20210210113141090

推荐选择【选择插件安装】的方式,因为jenkins默认配置的插件下载地址下载插件是非常慢的,如果选择【安装推荐的插件】会在下载插件的页面卡很久,因此采用【选择插件安装】的方式,然后在插件选择页面不勾选任何插件,最后进入到jenkins页面中,选择【系统管理】-【插件管理】-【高级】就会在当前页面找到jenkins插件的下载地址,如下图

image-20210210113614875

将网址中的https改为http,点击【提交】,此时再在插件管理页面根据需要下载对应的插件速度就会快很多。

Jenkins配置

安装完成后,新建一个自由项目,相关配置如下:

General 通用配置

image-20210210115413459

  • 丢弃旧的构建

    随着jenkins上构建的项目越来越多,存在历史数据也会越来越多,因此需要对旧的构建进行清理。

image-20210210153751062

源码管理

如果没安装任何源码管理插件,jenkins将没有任何选项,可以根据需要安装对应的源码管理插件,例如安装git插件后,配置如下:

image-20210210115943655

构建触发器

用来配置该任务触发构建的条件,默认有四种触发构建的方式

image-20210210120610687

Poll SCM和webhooks的区别

jenkins自带的Poll SCM机制,是按照给定的定时任务从Git中拉取代码,检查代码是否有更新,如果有更新就自动构建,是jenkins主动从GIt "拉" 代码;

webhooks是Git检查到代码变更的时候,根据配置的webhook连接主动 "推" jenkins,告知jenkins代码变更了需要重新拉取代码后构建。

构建环境

Build环境的一些参数

构建

真正的构建动作,一般来说,在Linux环境下构建一般是执行shell命令

image-20210210120850758

构建后操作

当项目构建完成之后,可以进行很多的操作,例如报告的输出,邮件的发送,告警信息的发送等等,可以通过各种各样的插件来完成不同的功能。

完结,撒花~