Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。

什么是持续集成

持续集成(Continuous integration),简称CI,是指开发阶段,对项目进行持续性自动化编译、测试,以达到控制代码质量的手段。持续集成是一种软件开发实践。

为什么要持续集成

  • 易于定位错误。也就是当你的持续集成失败了,说明你新添加的代码或者修改的代码引起了错误
  • 更加充分地测试系统中的各个单元
  • 有助于项目的开发,数据的收集
  • 便于开发流程的管理。要把一个开发的build(构建)提交给测试组做测试,测完满意了,再提交到发布组去发布

功能

  • 一个自动化的周期性集成测试过程,从拉取代码、编译构建、运行测试、结果记录、测试统计等都是自动化完成的,无需人工干预,有利于减少重复过程以节省时间、费用和工作量。
  • 他需要有代码托管工具的支持,比如SVN/GitHub/GitLab
  • 监控软件开发流程,快速显示问题

部署Jenkins环境

一台主机:192.168.1.4(已安装Git)

准备Java环境

tar zxf jdk-8u201-linux-x64.tar.gz 
mv jdk1.8.0_201/ /usr/local/java
rm -rf /usr/bin/java
vim /etc/profile
# 添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

source /etc/profile
java -version

安装Jenkins

rpm -ivh jenkins-2.204.3-1.1.noarch.rpm 
systemctl stop firewalld
systemctl start jenkins

web界面安装

访问http://192.168.1.4:8080

wait_jiemian

在Linux本地查看管理员密码

lock_jenkins

输入密码后,如果出现此界面

shaowait

如果出现以下

lixian

解决方法如下:

第一步 打开插件管理的高级设置页面
http://192.168.1.4:8080/pluginManager/advanced

第二步 修改更新站点地址
将https改为http  如果不行 可以用清华的加速站点 如下
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

安装推荐插件

install_chajian

等待安装完成(很长很长时间)

wait_install

安装加速神奇,Jenkins默认使用google来搜索插件的下载,而且插件也在国外网站,这里将updates目录中的default.json内的url换为百度(搜索引擎)和清华(下载插件地址),前提必须出现过以上界面才会有updates目录

cd /var/lib/jenkins/updates/
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

然后重启服务,并重新访问Jenkins的web界面

systemctl restart jenkins

安装完成后,创建管理用户

create_jenkins_user

shili_config

jenkins_install_success

cd_jiemian

用户密码更改

update_user_pass

Manage_users

setting_user_pass

找到密码位置更改即可

find_pass_path

配置全局工具

需要先安装maven

tar zxf apache-maven-3.6.0-bin.tar.gz 
mv apache-maven-3.6.0 /usr/local/maven
echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile

进入全局配置管理

Global_tool_configure

配置环境中的maven,设置系统文件,将路径填写为安装maven后的配置文件路径

set_jenkins_maven

配置Java环境,路径同样是安装过Java的环境,版本为1.8

set_jenkins_java

配置Git环境,路径写为Git命令所在路径,命令行执行which git

set_jenkins_git

配置maven安装目录,如果本机没有也可以选择自动安装

set_jenkins_maven_home

保存

插件管理

web界面管理插件

Manage_Plugins

可以进行对插件的升级、安装、卸载

Plugins

安装GitLab插件

install_gitlab_plugin

安装完成后重启Jenkins

installing_gitlab_plugin

安装完成后会退出web界面的登录,是因为重启了Jenkins

然后可以在已安装的界面中看到gitlab plugin

install_finsh

Jenkins官网下载插件

Jenkins插件官网

guanwang_jenkins

以下载maven integration插件为例,在搜索栏搜索即可

guanwang_find

查看插件的各个版本

plugin_version

选择需要的版本下载即可,以3.4为例,文件为hpi结尾的文件

download_plugin

然后在自己的Jenkins服务器web界面中上传该文件,等待重启即可

gaoji_upload

查看已安装插件

see_installed

用户权限管理

以下是对普通用户的管理,并不是管理用户,所以先来创建两个普通用户

create_jenkins_users

create_putong_users

根据需求创建两个用户

create_two_user

以下是新创建的两个用户,后面的按钮齿轮用来更改密码,红色的代表可以删除用户

update_password

用户全局安全配置

安全矩阵:对用户的全局权限进行管理

项目矩阵:用户对项目的权限进行管理

security_configure

在安全矩阵中添加创建的新用户

security_juzhen

可以为用户usera添加响应权限,为全局可读,对凭据可创建/删除,对代理可创建/删除,对任务可构建/创建/读取

add_pri

项目矩阵为userb添加权限

xiangmu_juzhen

但是这两种授权策略有漏洞,如这两种权限策略的任务都是对所有项目或者任务的权限,不能针对某个项目进行特定的授权,

权限管理

基于角色的权限管理

需要安装角色插件

installing_roles_plugin

role_celue

策略改为基于角色的策略

view_roles_celue

然后进行角色管理的界面

image-20200309105858164

全局权限配置

管理角色

Manage_roles

添加角色mupei并给予相应权限,保存,全局读取,任务构建、配置、读取权限

add_pri_roles

分配角色

assign_roles

添加用户并给予mupei角色的权限,添加的用户是已经创建过的

global——roles

验证角色权限

新建任务

image-20200309110618395

填写任务名以及风格

add_roles_name

在任务中构建一个shell

build_shell

根据以上创建任务的操作在创建两个任务,构建shell中的内容需要不一样以作区别,一共三个任务

three_item

切换usera验证权限,usera和userb是在前面已经创建过的用户了

全局读取权限,能看到这个界面就说明有读取权限

global_pri_read

进入随便一个任务,都只有build 和configure权限,构建和配置

success_pri_read_configure

在切换userb,登录之后直接权限拒绝

userb_access_denied

任务权限配置

重新使用管理用户进入管理角色界面

Manage_roles

任务配置中添加role名和pattern为任务的名字,test-.*代表test-A和test-B两个任务,并给予权限,任务的构建/配置/删除/读取/工作空间

rewu_prin_config

进入分配角色界面

assign_roles

在任务角色中添加usera和userb,并给予test角色的权限

usera_userb

之前的全局权限,即使进入任务之后,也只有构建(buile)和配置(configure)权限,刚才授权的test角色,对于任务具有,构建(build)、删除(delete)、工作空间(workspace)、配置(configure),如果用户没有全局的read权限,任务角色的设置将会失败

usera:全局:读取、构建、配置

​ 任务:构建、删除、工作空间、配置

userb:全局:无

​ 任务:构建、删除、工作空间、配置

验证

切换usera查看任务权限,如果没有配置没有问题,权限还是之前的权限的话,多等一会在刷新即可

test-A任务

item_pri_yanzheng_usera

test-B任务

item_pri_yanzheng_usera-B

hello-world任务,依旧还是保持了global的权限配置

global_pri_usera

切换userb查看权限

userb_access_denied

节点权限配置(集群结构)

对整体项目的操作

创建GitHub项目

使用GitHub账号登录,创建一个新的项目

create_test_jenkins_github

新项目名为test,并且为私有库

new_test_private_jenkins

准备上传项目

upload_an_kgcweb_test

打开之前的kgcweb.tar.gz包将src目录和pom.xml文件拖入即可,必须解压后在拖入

tar_zxf_kgcweb_github

tuoru_github_kgcweb

上传成功

upload_success_github_jenkins

在Jenkins的web页面中创建一个新的任务,任务名最好是与GitHub中的项目名一样

create_item_github_test

配置源码管理

源码管理规定这个任务从哪里拉取的代码,我们这里是使用Git来拉取GitHub的代码,需要输入git中项目的ssh路径或者https路径,这里使用ssh路径

copy_github_ssh_url

可以看到输入代码仓库地址之后,报错连接不到服务器,需要主机密钥来进行连接,所以报错是正常的,要么是没有密钥,要么就是密钥是错的,这里是因为没有密钥,所以将主机的密钥添加到GitHub中

upload_jenkins_pub_yao

添加一个新的ssh公钥

New_ssh_key_jenkins

然后需要在Jenkins本机生成一个密钥对,将公钥复制到GitHub中

shengcheng_key_file

完成之后进入Jenkins的源码管理中,添加凭证

add_credent_ssh

选择凭证类型为SSH 用户名加密钥的形式,username可以随便写,不需要Jenkins主机中存在,然后将Jenkins主机中生成的私钥复制到这个位置即可

add_ssh_username_unrestricted

然后选择自己创建的凭证,稍等几秒,红色字体报错信息消失了

choose_new_create_credentials

设置构建触发器

常用:1、有代码仓库触发Jenkins构建任务

​ 2、poll scm:日程表 crontab

今天使用日程表SCM来构建,为了能够确保任务能够执行成功,Jenkins采用了分散负载,为了防止同一时间的任务比较多而失败,这里将0改为H,表示在23时以后的一个小时之内将任务执行成功即可,不要过多的纠结具体的执行时间

Poll_SCM

设置构建环境

构建环境可写可不写,这里选择一个时间戳的环境,在每一条终端输出前加上时间戳

Build

完整构建项目代码

这三个是完整构建的步骤

wanzheng_build

对项目的代码进行完整的一次构建,Pre Steps是Build之前的操作,Build只代表mvn的操作,Post Steps是Build成功之后的操作,Pre Steps一般是不怎么设置的

Build

mvn clean package = clean package

Build_now

Post Steps

  • Run only if build succeeds:当Build成功执行后在执行
  • Run only if build succeeds or is unstable:成功或者不稳定
  • Run regardless of build result:无论结果如何

一般选择第一种,以下表示,当mvn clean package执行成功后执行shell命令

echo "build success $(date +%H:%M:%S)" >> /tmp/test.txt

Post_Steps

保存任务

构建任务

Build_Now_xian

查看终端输出结果

select_console_result

输出的结果就是构建在执行的过程,也是mvn执行的mvn clean package,配置maven的阿里云镜像也是在这里进行使用的

console_output_result

整个输出结果的开头,表示进行构建的用户

build_username

构建完成后在输出的结果中可以看到熟悉的画面,mvn执行成功的画面

image-20200310102124923

然后可以去查看构建成功后执行的shell是否成功

cat /tmp/test.txt
build success 10:18:11

构建后操作(推荐使用163邮箱)

也就是构建成功之后发送邮箱通知你

首先来设置关于Jenkins邮箱的操作

system_config

在最下方找到Jenkins URL的地方,填写自己的邮箱

Jenkins_url_email

找到扩展邮箱,smtp为qq的服务器,如果是163则将qq改为163,高级中的密码是邮箱的授权码

Extended_e-mail_notification

邮件通知中的设置和扩展邮箱类似,然后保存

e-mail_tongzhi

再次进入系统设置中,在最下方找到测试邮件,填写一个邮箱,点击“test configuratioin”即可测试,如果报错,检查以上设置,有可能会因为保存不成功

test_configuration

重新打开test任务的配置,直接来设置配置后操作

设置成功或者失败来发送邮件

config_after

Project Recipient List:收件人(建议使用163邮箱)

Attach Build Log:是否将日志作为附件发送

set_project_list

然后进入高级设置,设置触发器,将的发送人删除,添加Recipient List(刚才定义的收件人列表)和Requestor(触发本次操作的用户),在添加两个触发器Success和Unstable,然后保存

set_tiggers_jenkins

重新构建任务,成功后查看自己邮箱中是否有邮件产生,如果没有发送邮件,检查系统配置中关于邮箱的配置,有的配置可能会掉,重新保存即可

项目构建完成后的状态

小球

天气预报

部署Jenkins集群

应用场景:公司只有一台服务器而项目过多,性能不足。多个作业同时构建时候构建速度慢。项目构建资源分配上不合,需要多个节点分配进行构建作业。

主从只是为了帮助从分担硬件资源的压力,最后验证能够看到构建成功的war包是在从服务器的Jenkins目录下的

为了达到项目的运行速度,建议将两台主机的maven都做阿里云镜像

192.168.1.4(Jenkins主,已安装)

192.168.1.6(Jenkins从)

根据上面的安装步骤安装好第二台Jenkins,并且根据以上步骤需要做到配置全局工具之后才可以进行之后的操作,否则会在构建时报错

192.168.1.6做对1.4的免密登录

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zww0wyWKcruXNTuid4YPdDSBhJ0dsIQJfGIh8KbnpgQ root@192.168.1.6
The key's randomart image is:
+---[RSA 2048]----+
|+.oo *+*Bo.      |
| o+ =o++o=       |
| .+oo o +        |
| o o . . +       |
|E . . . S +      |
|.o   o + =       |
| .o . =.o        |
|.o   oooo.       |
|.   .. +.        |
+----[SHA256]-----+

ssh-copy-id -i root@192.168.1.4

192.168.1.4登录Jenkins管理界面

image-20200309123034413

进入管理节点界面

jenkins_manage_nodes

添加1.6节点

jenkins_new_node

填写作为jenkins从的信息,远程工作目录为1.6Jenkins的安装目录

add_jenkins_slave

点击上图中“添加”,添加凭据,用户名密码为1.6的主机用户和密码

add_jenkins_restricted

选择凭证,密码验证策略为手动可信任密钥验证策略

jenkins_add_host

完成之后可看到主从状态

jenkins_m_s_state

指定从节点来管理test任务,随便进入一个任务进行配置

jenkins_item_config

限制某个项目在从节点运行,webitem是从节点的标签,表示这个项目将会在webitem代表的1.6主机上运行,保存即可,因为test任务是刚验证的,所以直接在test任务直接添加这一个就行

add_slave_jenkins_build

重新构建test任务

slave_jenkins_remote_build

直到构建成功,会给你设置好的邮箱发successful邮件

也可以在作为Jenkins-slave的主机上查看构建的项目和成功后的Post Steps的文件/tmp/test.txt

192.168.1.6

查看构建后的项目

ll /var/lib/jenkins/workspace/test/target/
总用量 4
drwxr-xr-x. 4 root root   54 3月  10 18:38 kgcweb
-rw-r--r--. 1 root root 2104 3月  10 18:38 kgcweb.war
drwxr-xr-x. 2 root root   28 3月  10 18:38 maven-archiver

查看项目成功后执行的shell

cat /tmp/test.txt 
build success 18:38:50

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0