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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 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,动态资源占用,按需扩展,可以极大的提高系统的资源利用率及可扩展性。

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
10天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
28 1
|
11天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
37 4
|
17天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
19天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
18天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
19天前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
29天前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
129 0
|
3月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
66 0
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
113 0

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    无影云桌面