KubeSphere 使用外置 Jenkins

Stella981
• 阅读 907

KubeSphere 使用外置 Jenkins

相信很多 KubeSphere 用户之前都是使用 Jenkins 作为 CI/CD 工具,但是KubeSphere 默认会安装一个新的 Jenkins,无法直接使用已有的作为 CI/CD 引擎。这对于希望能上生产,但是又不方便迁移已有流水线的用户来说,还是有很多不方便的地方。本文的目标,就是给大家提供一个让 KubeSphere 可以使用外置 Jenkins 的方案。

限制

该方案并不是一个完美的终极方案,因此,在你开始使用外置 Jenkins 之前,请先评估下面的限制:

  • KubeSphere 上已有的流水线将会无法使用

  • 如果你已有的 Jenkins 中安装了不兼容的插件,可能会导致部分功能无法使用

  • 不会把旧的 Jenkins 上的流水线迁移到 KubeSphere 上

鉴于方案可能会有如上所属的风险,请不要直接在你的生产环境上操作!另外,请确保你有一个备份环境,并且在备份环境上进行如下的方案实施。

实验环境

实验环境:

    CentOS Linux release 7.9.2009 (Core)

   
   
   

安装依赖:

yum update -y && yum install wget curl vim bash-completion -y

安装 KubeSphere

为了不影响已有的业务,我们最好还是找个空白的环境,安装一个新的 KubeSphere 会比较稳妥。下面,我们首先把安装工具 kk 下载好。值得一提的是,KubeSphere 社区为了能够让用户更方便地体验到最新交付的 feature 或者修复的缺陷,提供了每日构建版,也就是所谓的:nightly build。想要体验找个 nightly build 最好的办法是使用最新开发中的的 kk。

需要注意的是,下面的链接是我个人编译出来的二进制文件,并不是社区发布的正式版本,仅供学习使用。

wget https://github.com/LinuxSuRen/kubekey/releases/download/v1.0.4/kubekey-v1.0.4-linux-amd64.tar.gz

为了方便使用,我们可以先把命令行自动补全配置好:

source <(kk completion --type bash)

相信本文的读者大部分是在国内,访问某些网络可能会有问题,让我们添加一个环境变量来解决网络的问题:

export KKZONE=cn

你可以把上面命令的日期修改为昨天,或者,让命令行自动补全帮你。

开启 Devops 组件

你可以按照社区官方文档中给出的步骤来操作,如果你不想再看更多的文档的话,可以试试通过命令行来一键开启。

安装 kubectl 插件:

wget https://github.com/LinuxSuRen/ks/releases/download/v0.0.11/kubectl-ks-linux-amd64.tar.gz

启用 DevOps:

kubectl ks com enable devops

等待组件启动完成:

kubectl logs -n kubesphere-system deploy/ks-installer -f --tail=50

当你看到类似如下的输出时,就说明组件启用成功:

#####################################################

外置 Jenkins

前面我们已经做了很多的准备工作,现在终于开始动手集成外置 Jenkins 了。

假设,你的外置 Jenkins 是通过这个命令安装的(如果你正好有一个可以做测试的外置 Jenkins 的话,可以跳过下面的步骤):

jcli center start -m docker --c-user root --image jenkinszh/jenkins-k8s --version 2.249.1 --sys hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true

请根据官方文档配置好 jcli 。

基本上,你需要做两件事:下载、通过命令来配置连接信息:

jcli config gen

如果你的环境直接访问互联网的话,安装 KubeSphere 所需要的插件就非常简单:

git clone https://github.com/kubesphere/ks-jenkins``jcli plugin install --formula ks-jenkins/formula.yaml

安装插件可能需要花点时间,具体依赖于你的网络带宽。jcli 可以通过读取 YAML 配置文件 ks-jenkins/formula.yaml 安装所有的插件。

接下来,需要手动配置 Jenkins。你需要关注两件事情:配置 KubeSphere Jenkins Auth 并启用,提供 KubeSphere API Gateway,也就是 ks-apiserver 所暴露的端口。另一个重要的部分是 Kubernetes 配置,请确保它至少包含这些 podTemplates base, nodejs, maven and go 。你可以从 KubeSphere 默认安装的 Jenkins 中的 podTemplates 了解到如何配置。

当你完成了上面的配置,而且所有插件都已经安装成功后,重启 Jenkins。重启的方法有很多,但还是提供一个比较优雅的吧:

jcli restart -b

最后,修改 configmap kubesphere-system/kubesphere-config 中 Jenkins 的连接信息。从 data.kubesphere.yaml 中找到 devops.host ,把它修改为你期望使用的 Jenkins 的地址。为了让修改生效,我们还需要重启 ks-apiserver ,命令为:

kubectl rollout restart -n kubesphere-system deploy ks-apiserver

完成上面的步骤后,创建一个新的流水线,你就会发现已经关联到了新的 Jenkins 上了。

写在最后安装一个全新的环境,通常是一件相对比较容易的事情。但是,想要平滑地把已有的组件做迁移的话,则可能会遇到各种问题。非常欢迎看到本文的读者和我一起解决上面提到的几个限制因素。

更多精彩文章/视频,扫描下方二维码关注Jenkins 中文社区获取。

KubeSphere 使用外置 Jenkins

- END -

KubeSphere 使用外置 Jenkins

Jenkins 完全系列视频教程制作组招募

Jenkins系列视频~Kubernetes中运行Jenkins

Jenkins系列视频~命令行直接启动 Jenkins

Jenkins系列视频~Docker容器中运行Jenkins

在 Jenkins 中运行 Selenium 自动化测试

Jenkins系列视频~节点标签的使用

本文分享自微信公众号 - Jenkins(Jenkins-Community)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这