开发者社区> 初扬> 正文

Kubernetes集群上基于Jenkins的CI/CD流程实践

简介: 本节我们通过在Kubernetes集群上创建并配置Jenkins Server实现应用开发管理的CI/CD流程,并且利用Kubernetes-Jenkins-Plugin实现动态的按需扩展jenkins-slave。
+关注继续查看

本节我们通过在Kubernetes集群上创建并配置Jenkins Server实现应用开发管理的CI/CD流程,并且利用Kubernetes-Jenkins-Plugin实现动态的按需扩展jenkins-slave。

安装Kubernetes集群

首先,如果您没有Kubernetes集群,那么您需要创建一个。参见创建集群

安装Jenkins Server

为了让您的Jenkins Server可以具有Fail Over的能力,建议您将Jenkins的数据存储到阿里云NAS存储上。

步骤一:

首先您需要连接到Kubernetes集群。参见

步骤二:创建NAS持久化卷

然后,创建一个Kubernetes持久化NAS存储卷。 参见创建NAS持久化存储卷
假设您已经在阿里云控制台上面创建了您自己的NAS存储,其挂载点为:yournas-xxxx.cn-hangzhou.nas.aliyuncs.com。
执行下面的命令下载一个persistent volume模板,替换里面的server的值为您的挂载点,然后执行kubectl apply -f pv.yml创建持久化NAS卷。

root@iZbp:~/jenkins# curl -L http://aliacs-k8s.oss.aliyuncs.com/conf%2Fjenkins%2Fpersistent-volume.yml > pv.yml
root@iZbp:~/jenkins# vi pv.yml
root@iZbp:~/jenkins# kubectl apply -f pv.yml
root@iZbp:~/jenkins# kubectl get pv -n ci

步骤三:创建Jenkins Server

通过以下命令启动一个Jenkins Server。该命令会创建一个阿里云公网SLB,方便您从公网访问jenkins服务。如果不需要公网访问请将Service的type更改为NodePort。

root@iZbp:~/jenkins# curl -L http://aliacs-k8s.oss.aliyuncs.com/conf%2Fjenkins%2Fjenkins.yml > jenkins.yml
root@iZbp:~/jenkins# kubectl apply -f jenkins.yml

root@iZbp:~/jenkins# kubectl get po -n ci
root@iZbp:~/jenkins# kubectl get svc -n ci
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
jenkins                172.19.0.10      40.112.120.10 53/UDP,53/TCP   34m

然后通过地址http://40.112.120.10 访问jenkins服务.

步骤四: 配置jenkins

访问上面的jenkins地址http://40.112.120.10,如下图:
14990745689268

需要使用token来初始化jenkins,该token文件存在于 secrets/initialAdminPassword 下,您需要手动挂载NAS到本地目录后查看token内容。使用以下命令,将yournas-xxxx.cn-hangzhou.nas.aliyuncs.com 替换成您自己的挂载点:

root@iZbp:~/jenkins# mkdir -p mnt
root@iZbp:~/jenkins# mount.nfs yournas-xxxx.cn-hangzhou.nas.aliyuncs.com:/ mnt
root@iZbp:~/jenkins# cat mnt/secrets/initialAdminPassword
7b48377b16ef49a8ba678031dd12111a

注意: 如果提示未找到mount.nfs命令,则需要先安装nfs-utils包。

将上面输出的token粘贴到界面上输入框进入下一步:
14990751529535
14991565711711

这里选择安装插件,由于连接国外的网络问题,ant插件不一定能下载成功,建议您先去掉ant插件安装,然后点下一步等待安装完成。

然后设置用户名和密码。
14991567528063

现在您已经成功的创建了一个jenkins server.
14991567973737

步骤五: 配置Kubernetes-jenkins-plugin实现dynamic slaves provision.

安装Kubernetes-plugin
首先进入插件管理页面【系统管理】->【管理插件】->【可选插件】,搜索kubernetes plugin,勾选要安装的插件,然后点击【直接安装】。
14991571780357

然后勾选安装后重启,等待重启完成后kubernetes-plugin就安装完成了。
14991572186671

配置jenkins kubernetes-plugin插件
单击【系统管理】-> 【系统设置】,找到【云】,然后点击【新增一个云】
14991591747029

name: kubernetes
Disable https certificate check: true
kubernetes URL: https://kubernetes.default.svc.cluster.local
JenkinsURL: http://jenkins-svc.default.svc.cluster.local
Connect timeout: 5
Read Timeout: 15

这样就配置好了kubernetes-plugin, 可以实现动态jenkins-slaves in pod.

Jenkins CI示例
新建一个Pipeline任务。
14991611809407

然后将下面的内容粘贴到pipeline Script里面,保存。

podTemplate(label: 'golang-pod',  containers: [
    containerTemplate(
            name: 'golang',
            image: 'registry.cn-hangzhou.aliyuncs.com/spacexnice/golang:1.8.3-docker',
            ttyEnabled: true,
            command: 'cat'
        ),
    containerTemplate(
            name: 'jnlp',
            image: 'registry.cn-hangzhou.aliyuncs.com/google-containers/jnlp-slave:alpine',
            args: '${computer.jnlpmac} ${computer.name}',
            command: ''
        )
  ]
  ,volumes: [
        /*persistentVolumeClaim(mountPath: '/home/jenkins', claimName: 'jenkins', readOnly: false),*/
        hostPathVolume(hostPath: '/root/work/jenkins', mountPath: '/home/jenkins'),
        hostPathVolume(hostPath: '/var/run/docker.sock', mountPath: '/var/run/docker.sock'),
        hostPathVolume(hostPath: '/tmp/', mountPath: '/tmp/'),
]) 
{
    node ('golang-pod') {
        
        container('golang') {
            git url: 'https://github.com/spacexnice/blog.git' , branch: 'code'
            
            stage('Build blog project') {
                
                sh("make")
        
            }
        }
    }
}

14991613272396

最后单击开始构建,通过构建日志观察任务的执行情况,你会发现Jenkins Server会通过Kubernetes启动一个Pod作为jenkins slave执行构建Pipeline。

小结

通过kubernetes-jenkins-pipline插件,您可以方便的在阿里云Kubernetes集群上配置按需启动的jenkins-slave,动态资源占用,按需扩展,可以极大的提高系统的资源利用率及可扩展性。

阿里云容器服务团队致力于在阿里云上推广容器技术。想了解更多容器服务内容,请访问阿里云容器服务

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在物联网的推动下,制造业能否摆脱繁琐的人工流程?
分析师辛迪·尤特拉斯(Cindy Jutras)的最新研究发现,目前平均每天有26%的制造订单是人工输入的。因为这是非常耗时且容易出错的,所以这阻碍了生产率。并且低效率在整个制造流程中继续存在。
187 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27723 0
内核中的UDP socket流程(11)——ip_append_data
作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 继续ip_append_data,         if (copy > length)             copy = length;         if (!(rt->dst.
773 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23523 0
【工业串口和网络软件通讯平台(SuperIO)教程】三.二次开发流程
1.1    二次开发流程图   1.2    引用相关组件 找到“开发包”,引用里边的相关组件。如下图:   1.3    开发设备驱动模块 1.3.1    开发发送协议驱动   继承SuperIO.Device.DeviceSendProtocol接口,覆盖相关的FunctionXX接口函数,进行数据打包,“XX”代表16进制的数据,例如:Function31函数通过this.SendProtocol.GetSendCmdBytes(addr, new byte[] { 0x32 }, null, false)函数进行调用。
656 0
一起谈.NET技术,Visual Studio 2010中敏捷开发流程模板的应用
  本文将会为您讲述如何使用TFS 2010 MSF Agile 5.0流程模板为迭代项目而提供的工作簿。首先,让我们看一看Visual Studio 2010 IDE中的Team Explorer插件:   接下来,我们将会进入到SharePoint project portal中,为大家展示Team Explorer是如何模拟它的结构的。
761 0
ECS云服务器初学者体验以及链接流程
云服务器,可以说与我们的生活息息相关,网络中的不少数据与网站都是存储在云端之中,平常我们或多或少都听过“云服务器”这个词,但是接触且了解它的人却也不多。而正逢我们专业老师要求我们运用Python以及django搭建一个小型网站,为此我们特意了解了云服务器以及得知阿里云“飞天加速计划·高校学生在家实践”活动。在学习ECS的云服务器搭建中,我们更了解了“云端”这一概念,学习了不少也收获了不少。
201 0
Day2:体验ECS搭建Docker环境全流程
使用ECS可以快速从全新CentOS系统搭建Docker环境。本文介绍了使用ECS搭建Docker环境并在其中部署Nginx服务的全流程。
696 0
+关注
初扬
http://aoxn.github.io/
15
文章
5
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
相关文档: 容器镜像服务 ACR 容器服务 ACK 服务网格 ASM
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载