Jenkins CI/CD介绍

持续构建与发布是我们工作中必不可少的一个步骤,目前大多公司都采用Jenkins集群来搭建符合需求的CI/CD流程,然而传统的Jenkins Slave一主多从方式会存在一些痛点,比如:主 Master 发生单点故障时,整个流程都不可用了;每个Slave的配置环境不一样,具有比较大的差异性,这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲;资源分配不均衡,有的Slave要运行的job出现排队等待,而有的Slave处于空闲状态;最后资源有浪费,每台Slave可能是实体机或者V,当 Slave 处于空闲状态时,也不会完全释放掉资源。
       由于传统的Jenkins具有上述痛点,因此我们希望有一种更优秀更合理的方式来完成CI/CI流程。容器化技术的产生给我们带来了希望,Docker容器可以很好的对Slave节点的环境进行封装,解决掉每个Slave配置差异化的问题。而Kubernetes容器管理平台又可以很好的解决资源分配不均匀的问题。示意图如下:

从图中可以看到:Master节点和Slave节点都以容器的方式运行,而不是固定在某一台服务器上,大大的增加了CI/CD的健壮性。本文为了简化Master节点的搭建难度,并没有将Master节点部署到集群当中,而是单独部署在另一台服务器上,以容器的方式运行。CI/CD的大致流程是:jenkins的Master节点触发任务运行,任务触发kubernetes创建Pod,Pod里面会运行Slave容器,Slave容器链接Master进行具体的处理流程。

安装Jenkins的Master节点

# .拉取镜像
docker pull jenkins/jenkins # .启动命令
docker run -itd -p : -p : --name jenkins --privileged=true --restart=always -v /jenkins:/var/jenkins_home jenkins/jenkins:latest
# --privileged=true 使得container内的root拥有真正的root权限
# --restart=always 服务器重启时会自动启动容器
# .查看网页登录需要的Password 
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Jenkins链接kubernetes集群

第一步:安装kubernetes插件

管理员账户登录Jenkins Master页面,点击 “系统管理” —> “插件管理” —> “可选插件” —> “Kubernetes plugin” 勾选安装即可。

第二步:网页配置(重点)

安装完毕后,点击 “系统管理” —> “系统设置” —> “新增一个云” —> 选择 “Kubernetes”,然后填写Kubernetes和Jenkins配置信息。

图中黑色部分比较简单,红色部分较难,需要单独说明。名称字段随意填写即可;kubernetes地址填写的是kubernetes集群apiserver的地址,注意是https协议;证书和凭据在下面说明,可以通过点击连接测试按钮,查看是否连接成功;jenkins地址填写访问jienkins的网页地址即可。

生成证书和凭据

# .在kubernetes的master节点上安装生成证书的文件
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && chmod +x cfssl_linux-amd64 && mv cfssl_linux-amd64 /usr/local/bin/cfssl wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && chmod +x cfssljson_linux-amd64 && mv cfssljson_linux-amd64 /usr/local/bin/cfssljson wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 && chmod +x cfssl-certinfo_linux-amd64 && mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo # . 生成json文件
cat >> admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size":
},
"names": [
{
"C": "CN",
"ST": "hangzhou",
"L": "XS",
"O": "system:masters",
"OU": "System"
}
]
}
EOF # .生成以下三个文件:admin.csr admin-key.pem admin.pem
cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key --profile=kubernetes admin-csr.json | cfssljson -bare admin # .生成pkc格式证书jenkins-admin.pfx
openssl pkcs12 -export -out ./jenkins-admin.pfx -inkey ./admin-key.pem -in ./admin.pem -passout pass:secret # .查看凭证(全部复制,包括起始和结束两行)
cat /etc/kubernetes/pki/ca.crt

添加凭据

输入密码 secret,后面的内容可以不填写,点击添加

环境搭建也可参考博客:https://www.cnblogs.com/xiao987334176/p/11338827.html

Jenkins上配置pipline任务,测试环境搭建是否成功

pipeline {
agent any stages {
stage("one") {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
metadata:
name: test1
spec:
containers:
- name: busybox
image: 192.168.1.9:/busybox1:latest
command:
- cat
tty: true
"""
}
} steps{
container("busybox") {
sh """
echo "first step"
hostname
"""
} }
} stage("two") {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
metadata:
name: test1
spec:
containers:
- name: busybox
image: 192.168.1.9:/busybox2:latest
command:
- cat
tty: true
"""
}
} steps{
container("busybox") {
sh """
echo "two step"
hostname
"""
} }
}
}
}

如上述代码:一共包含两步,分别使用的是不同的镜像,随机运行在集群的某一个节点上,可以通过parallel实现并行,大大减少运行的时间。可以参考 https://testerhome.com/topics/22280 进行原理性理解,主要部分如下图所示。

Jenkins链接Kubernetes集群的更多相关文章

  1. 配置 Jenkins 连接 Kubernetes 集群

    需求:外部 Jenkins 需要连接 Rancher 中的 Kubernetes 集群. 1.集群 config 文件 Rancher 首页,"集群" --> 右上角&quo ...

  2. (转)实验文档4:kubernetes集群的监控和日志分析

    改造dubbo-demo-web项目为Tomcat启动项目 Tomcat官网 准备Tomcat的镜像底包 准备tomcat二进制包 运维主机HDSS7-200.host.com上:Tomcat8下载链 ...

  3. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  4. 在Kubernetes集群中使用calico做网络驱动的配置方法

    参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...

  5. 使用acs-engine在Azure中国区部署kubernetes集群详解

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7649642.html 1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器 ...

  6. Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群

    使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...

  7. 如何在CentOS上创建Kubernetes集群

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由编程男孩 发表于云+社区专栏 介绍 Kubernetes(常简称为K8s)是用于自动部署.扩展和管理容器化(containerized ...

  8. kubernetes集群pod使用tc进行网络资源限额

    kubernetes集群pod使用tc进行网络资源限额 Docker容器可以实现CPU,内存,磁盘的IO限额,但是没有实现网络IO的限额.主要原因是在实际使用中,构建的网络环境是往超级复杂的大型网络. ...

  9. jenkins+maven+tomcat集群发布

    jenkins+Gitlab+maven+tomcat实现自动集成.打包.部署 - 李栋94 - 博客园https://www.cnblogs.com/lidong94/p/7427923.html ...

随机推荐

  1. powershell代码混淆绕过

    目前大多数攻击者已经将PowerShell 利用在了各种攻击场景中,如内网渗透,APT攻击甚至包括现在流行的勒索软件中.powershell的功能强大且调用方式十分灵活,灵活使用powershell可 ...

  2. 微信小程序-页面栈

    在小程序中以栈的形式维护了当前的所有页面 当发生路由切换的时候,页面栈的表现如下: 初始化:新页面入栈 打开新页面:新页面入栈(调用 API wx.navigateTo 或使用组件 <navig ...

  3. Java 多线程基础(十)interrupt()和线程终止方式

    Java 多线程基础(十)interrupt()和线程终止方式 一.interrupt() 介绍 interrupt() 定义在 Thread 类中,作用是中断本线程. 本线程中断自己是被允许的:其它 ...

  4. Java并发编程:Callable、Future和FutureTask 实现龟兔赛跑

    1.不清楚的看博客http://www.cnblogs.com/dolphin0520/p/3949310.html 我们使用上面的代码来实现一个龟兔赛跑 package com.weiyuan.te ...

  5. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)

    回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...

  6. CLR垃圾收集器

    CLR GC是一种引用跟踪算法,大致步骤如下: 1.暂停进程中所有的线程: 2.标记阶段,遍历堆中的所有对象,标记为删除,然后检查所有活动根,如果有引用对象,就标记那个对象可达,否则不可达: 3.GC ...

  7. Redis 的基本数据类型 和 基础应用场景

    Redis 的基础应用场景 获取中奖用户ID,随机弹出之后集合中就不存在了[set] 存储活动中中奖的用户ID,保证同一个用户不会中奖两次[set] 存储粉丝列表,value 为粉丝的用户ID,sco ...

  8. 【弹性碰撞问题】POJ 1852 Ants

    Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of ...

  9. [CEOI1999]Parity Game 题解

    P5937 [CEOI1999]Parity Game 洛谷P5937 P5937 [CEOI1999]Parity Game 前言: 个人感觉这道题初看想不到并查集啊!(说实话我题都没读懂,第二遍才 ...

  10. 一个ACE 架构的 C++ Timer

    .h #ifndef _Timer_Task_ #define _Timer_Task_ #pragma once #include <ace/Task.h> #include <a ...