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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本节我们通过在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,动态资源占用,按需扩展,可以极大的提高系统的资源利用率及可扩展性。

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
19天前
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
19天前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
19天前
|
Prometheus 监控 Kubernetes
监控 Kubernetes 集群证书过期时间的三种方案
监控 Kubernetes 集群证书过期时间的三种方案
|
2天前
|
Kubernetes 调度 Docker
玩转Kubernetes—使用minikube操作集群
玩转Kubernetes—使用minikube操作集群
9 0
|
2天前
|
Kubernetes Ubuntu Linux
玩转Kubernetes—尝试以不同方式初始化集群
玩转Kubernetes—尝试以不同方式初始化集群
8 0
|
19天前
|
存储 Kubernetes 容灾
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
|
19天前
|
Kubernetes 监控 物联网
IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置
IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置
|
19天前
|
存储 Kubernetes 监控
IoT 边缘集群基于 Kubernetes Events 的告警通知实现
IoT 边缘集群基于 Kubernetes Events 的告警通知实现
|
19天前
|
Kubernetes 网络协议 网络虚拟化
WireGuard 系列文章(九):基于 K3S+WireGuard+Kilo 搭建跨多云的统一 K8S 集群
WireGuard 系列文章(九):基于 K3S+WireGuard+Kilo 搭建跨多云的统一 K8S 集群
|
19天前
|
Kubernetes 容器 Perl
K8S 性能优化 - 大型集群 CIDR 配置
K8S 性能优化 - 大型集群 CIDR 配置

相关产品

  • 容器服务Kubernetes版