Jenkins+kubernetes(第1节)

Jenkins

特性

  • 开源java语言开发持续集成,持续部署工具
  • 易于安装:yum/docker/war
  • 消息通知及测试报告:集成RSS/e-mail,通过rss发布构建结果或当构建完成时候通过email通知,生成junit测试报告
  • 分布式构建:支持jenkins能够让多台计算机一起构建/测试
  • 丰富插件支持:git,maven,docker

持续集成流程

image.png

(1)提交代码到git仓库(gitlab)
(2)使用git工具到git仓库拉取代码到安装jenkins的集成服务器,再配合jdk,maven等软件完成代码编译,代码测试与审查,打包工作
(3)jenkins将编译生成的jar/war分发到测试服务器/生产服务器,完成发布,即可访问
持续集成服务器安装:jenkins,jdk,maven,git

安装

(1)先安装jdk,然后获取jenkins安装包
https://jenkins.io/zh/download/
如果centos地址:
https://pkg.jenkins.io/redhat-stable/
国内镜像位置:wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpm
(2)安装文件
rpm -ivh jenkins-2.235.2-1.1.noarch.rpm
(3)修改jenkins配置
vim /etc/sysconfig/jenkins
修改为:

JENKINS_USER="root"
JENKINS_PORT="8888"

(4)启动jenkins
systemctl start jenkins
启动jenkins报错: Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
按提示输入:systemctl status jenkins.service检查原因

image.png

解决方法:

  • 查看当前Java的环境变量 echo $JAVA_HOME
  • 复制Java的环境变量地址, 编辑/etc/init.d/jenkins文件, 指定位置添加该地址, 后缀附上/bin/java vim /etc/init.d/jenkins


    image.png

修改完重启jenkins
systemctl start jenkins

image.png

可以看到启动成功
(5)访问服务器地址/8888端口
(6)获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
(7)跳过插件安装
jenkins插件默认连接官网下载,速度很慢,暂时跳过
选择自己选择插件安装,无需推荐安装,然后选择无

image.png

插件安装

jenkins自身不提供一些功能,我们利用插件实现从gitlab拉取代码,使用maven构建项目
(1)修改jenkins插件下载地址
将默认官网插件下载地址更改为国内插件地址
jenkins->manage jenkins->manage plugins->available

image.png

image.png

查出我们可以用的官方插件,这一个tab页面加载速度慢,因为查询是走的官网
image.png

通过这一步骤我们就将jenkins官方的插件列表下载到了本地,然后修改地址文件,替换为国内插件地址

cd /var/lib/jenkins/updates
## 替换命令 将jenkins官方地址更改为国内镜像地址,将里面的google地址更改为百度
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
image.png

通过上面的操作,我们以后下载插件的速度将会很快
(2)jenkins操作界面manager plugins点击advanced,将update site地址更改为国内插件地址

image.png

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(3)更改完配置,重启jenkins,不需要去服务器重启,只需要在jenkins网页访问端口如8888后加上/restart命令,然后选择yes进行重启
(4)在上一步重启完成之后,页面重新登录,我们准备下载安装jenkins中文汉化插件(部分汉化)
manage jenkins->manage plugins->available
等页面加载完毕,然后在查找框中输入chinese
image.png

找到以后,勾选第二项,下载完后直接重启,该插件需要重启生效
image.png

选择restart选项以后如果页面没重启刷新页面即可重启,再一次进入可以看到中文界面

jenkins用户权限管理

不同的用户登录jenkins应该有不同的权限,我们使用role-based authorization strategy插件来管理jenkins用户权限
(1)安装该插件

image.png

这次我们选择直接安装,因为该插件不需要重启生效
(2)安装完成后,选择主菜单->系统管理-> 全局安全配置
image.png

进来以后可以发现授权策略,默认为登录用户具有一切权限,很明显是不合理的,我们需要不同的人员拥有不同的角色,进而有不同的权限,因此我们修改为role based strategy(安装了插件才会显示该选项),然后保存


image.png

(3)创建角色,主菜单-> manage jenkins选择下面的manage and assign roles


image.png

manage roles角色主要有3种,
第一种 global roles:用于管理jenkins,比如admin
image.png

我们在这里面增加baseRole全局基础角色,用于给project roles下面的角色增加访问jenkins的权限,给baseRole的权限有overall中的read,有了这个就这个角色有了基本的登录权限
第二种 project roles:根据项目来分配的角色,不同的项目被不同的人访问
这里填入角色名称和角色能访问项目的正则表达式(pattern)
比如role1 pattern=radientApi.*,即能访问radientApi开头的项目,同时勾选job下面的所有权限

image.png

第三种 slave roles:节点角色,场景:jenkins主从下的角色,暂时用不到

最后保存
(4)创建用户:再次选择manage jenkins-> manage users-> 新增用户


image.png

然后我们如果不分配角色给用户,我们直接用该用户账户进行登录的话,结果如下


image.png

因此我们重新用管理员账户登录,选择主菜单 manage jenkins-> manage and assign roles-> 分配角色
其中又分为global roles,item roles,node roles
我们在global roles中为我们的创建的radientApiTestUser用户分配baseRole角色,让他具有登录权限


image.png

此时如果重新登录radientApiTestUser用户,是可以看到基本的列表的,但是无法看到项目

image.png

然后在item roles为其添加role1角色


image.png

(5)建立项目测试


image.png

任务名称输入radientApi,然后暂时选择自有风格项目选项,然后确定,我们radientApiTest测试用户就可以在项目列表看到这个项目了,因为他的角色对于项目pattern radientApi.* 具有查看权限


image.png

jenkins凭证管理

凭证可以用来存储需要密文保护的DB密码,gitlab密码信息,docker仓库密码等,以便jenkins和这些第三方应用交互
(1)安装credentials binding插件
manage jenkins->manage plugins ->可选插件->等加载完毕再去搜索


image.png

点击直接安装,然后回到主界面
(2)安装完后,在系统配置中可以看到凭据菜单


image.png
image.png

点击右侧的提供者-> 全局


image.png

然后点击左侧,新建凭证


image.png

可选的凭证类型有5种,前两种常见:
  • username with password:(常见)
    存储一些用户名和密码来登录的凭证,比如我们使用gitlab去拉取代码,需要用到gitlab账户信息,那我们就可以使用这个凭证
  • ssh username with private key:(常见)
    应用在ssh的免密登录的情况下,gitlab和github均支持这种登录方式
  • secret file
    密码文件,即支持密钥文件的方式存储
  • secret text
    密钥文本
  • certificate
    证书类型


    image.png

    (3)测试前两种凭证


    image.png

在github,gitlab上拉取代码有两种方式,http方式用的是普通的用户名密码方式,ssh方式即可以免去密码的方式拉取代码
(3.1)安装git插件和git工具
为了让jenkins支持从gitlab上拉取代码,需要jenkins网页端安装git插件以及在安装有jenkins的centos服务器上安装git


image.png

直接安装完毕后,我们在主控制台,选择new item来随便创建一个项目


image.png

点击确定以后


image.png

可以在git选项的repositories填写需要拉取代码的git仓库的信息
然后我们下一步在安装有jenkins的服务器上装上git(不装的话,jenkins是无法到git上拉取代码)
yum install git -y 安装
git --version 安装后查看版本

(3.2)上一步将git装好以后,我们就可以在利用jenkins去gitlab上拉取代码,我们首先创建一个username with password的凭证

image.png

用户名,密码就是登陆gitlab的用户名和密码,点击确定,这样就可以看到我们创建的这个凭证
(3.3)使用上面创建的凭证
点击自己的某个项目进入项目管理页面,点击项目管理页面左侧的配置,进入项目配置页面

image.png

源码管理用于在git拉取代码,仓库地址根据登录类型(username password,ssh)的不同,地址不一样,我们在gitlab上复制http形式的仓库url填入下面第一个选项,然后在没有选择第二项的时候,将会报错,因为没有权限去这个地址拉取代码,因此我们在下面的credentials中选择我们刚刚创建好的凭证


image.png

最后点击应用,保存

然后我们点击立即构建来构建这个项目(这里的构建其实就是将gitlab上的代码拉到jenkins服务器磁盘上指定目录)

image.png

然后可以点击构建历史中的记录来进入构建详情,选择控制台输出查看项目构建情况,最后jenkins会将项目的代码拉取到jenkins服务器的/var/lib/jenkins/workspace这个目录下面,我们可以在安装jenkins的对应服务器目录进行查看

image.png

可以看到磁盘上已经将gitlab上的项目的源代码下载到了磁盘本地

image.png

(3.4)ssh免登陆凭证

image.png

需要在jenkins服务器防止我们的私钥,将我们的公钥上传到gitlab服务器
(3.4.1)使用root用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.ssh/目录保存了公钥和私钥
image.png

(3.4.2)将上一步生成的公钥 id_rsa.pub的内容复制到gitlab上,我们首先用管理员的账户登录gitlab,然后选择用户设置,将公钥内容填入
image.png

至于私钥,我们可以用到jenkins的凭证管理来管理私钥,来到jenkins的凭证管理,添加一个ssh凭证
image.png

保存,然后跟上面一样,在项目的配置界面的源码管理中,仓库地址改成gitlab的ssh地址不再用http,然后凭证选择ssh方式,继续点击构建(目前的构建仅仅是拉取代码到jenkins服务器磁盘)就可以

maven安装配置

在jenkins继承服务器上,我们需要安装maven来编译和打包项目
(1)安装maven
https://maven.apache.org/download.cgi
下载maven包,上传到jenkins服务器

tar -xzvf apache-maven-3.6.3-bin.tar.gz
mkdir -p /home/develop/maven_3.6.3
mv apache-maven-3.6.3/* /home/develop/maven_3.6.3 移动文件

(2)配置环境变量
vim /etc/profile

export JAVA_HOME=/home/develop/jdk1.8.0_161
export MAVEN_HOME=/home/develop/maven_3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

使配置生效
source /etc/profile
查看maven版本
mvn -v

image.png

(3)jenkins的后台系统管理-> 全局工具配置


image.png

在这里我们需要配置jdk和maven,配置jdk的时候,点击新增jdk,然后取消勾选自动安装,因为我们已经在jenkins服务器上自己安装了jdk了,然后界面会更换到下一个界面

image.png
image.png

下一步配置maven,同样,我们点击新增maven并取消勾选自动安装install automatically

image.png

最后,我们点击应用,再点击保存,即可保存输入
(4)manage jenkins->configure system(系统配置)
我们需要在系统配置中加入一些全局的变量,让jenkins知道maven的一些命令

image.png

第三个属性的key是固定的,即往linux的path追加了maven的命令
最后点击应用,保存
(5)为了提高下载速度,修改maven的镜像为国内镜像

// 创建本地仓库目录
mkdir -p /home/maven_repo
// 修改maven的settings.xml
vim /home/develop/maven_3.6.3/conf/settings.xml

本地仓库改为:
<localRepository>/home/maven_repo</localRepository>

image.png

添加阿里云私服地址

<mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>
  </mirror>

(6)上一步我们将代码拉取下来,这一步我们完成代码的编译和打包
我们点击增加构建步骤,选择执行shell脚本,然后在命令中输入测试命令

image.png

点击应用保存,然后回到项目配置界面,左侧选择build now,然后jenkins界面看控制台输出,可以看到首次构建会拉取依赖到装有jenkins服务器上的maven仓库中,最后完成编译和打包,成功即证明我们之前的maven配置是有效的


image.png

我们然后到jenkins拉取在jenkins所在服务器的磁盘上的项目的target目录中已经有了编辑构建的war/jar包

tomcat安装配置

(1)在所有的项目要部署的负载节点安装jdk和tomcat
(2)登录tomcat页面,因为jenkins是需要tomcat的账户才能将构建好的项目的war包远程传输到装tomcat的负载节点,因此需要为tomcat服务器开启账户权限(默认情况是没有开启的),验证方式:点击manager webapp


image.png

我们将会看到403的无权限界面,即目前是没有配置账户的,配置完以后,该界面是允许我们去管理我们的项目的


(3)我们去两个负载节点的tomcat的文件夹里面conf目录,然后


image.png

vim tomcat-users.xml
默认没有配置,我们按照这个示范进行配置

image.png

我们直接将所有的role标签和<user>标签赋值到哪个tomcat-users.xml中的tomcat-users范围内,然后保存
(4)修改/webapps/manager/META-INF/context.xml ,注释掉下面的代码,因为默认是不允许我们远程访问tomcat的,注释了就允许远程访问了

image.png

这时候我们就完成了tomcat用户和角色的配置,接着进行重启tomcat操作


image.png

然后重新在tomcat界面,选择manager tomcat,输入tomcat用户账户名和密码进入tomcat管理页面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355