Jenkins CI/CD on Kubernetes with dynamic slaves

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

步骤 1 安装 Kubernetes 集群

如果您没有 Kubernetes 集群,您需要先创建一个。具体操作参见 部署 Kubernetes 集群

步骤 2 连接 Kubernetes 集群

有关如何连接到 Kubernetes 集群,参见 通过 kubectl 连接 Kubernetes 集群

步骤 3 创建 NAS 持久化卷

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

有关如何创建 Kubernetes 持久化 NAS 存储卷,参见 使用 NAS 数据卷

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

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

步骤 4 创建 Jenkins Server

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

  1. root@iZbp:~/jenkins# curl -L http://aliacs-k8s.oss.aliyuncs.com/conf%2Fjenkins%2Fjenkins.yml > jenkins.yml
  2. root@iZbp:~/jenkins# kubectl apply -f jenkins.yml
  3. root@iZbp:~/jenkins# kubectl get po -n ci
  4. root@iZbp:~/jenkins# kubectl get svc -n ci
  5. NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. jenkins 172.19.0.10 40.112.120.10 53/UDP,53/TCP 34m

然后,您就可以通过地址 http://40.112.120.10 访问 Jenkins 服务了。

步骤 5 配置 Jenkins

  1. 访问上面的 Jenkins 地址 http://40.112.120.10,如下图所示。

  2. 您需要使用 token 来初始化 Jenkins。该 token 文件存放在 secrets/initialAdminPassword 下,您需要手动挂载 NAS 到本地目录后查看 token 的内容。您需要将以下命令中的 yournas-xxxx.cn-hangzhou.nas.aliyuncs.com 替换为您自己的挂载点。
    1. root@iZbp:~/jenkins# mkdir -p mnt
    2. root@iZbp:~/jenkins# mount.nfs yournas-xxxx.cn-hangzhou.nas.aliyuncs.com:/ mnt
    3. root@iZbp:~/jenkins# cat mnt/secrets/initialAdminPassword
    4. 7b48377b16ef49a8ba678031dd12111a

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

  3. 将上面输出的 token 粘贴到界面上的输入框中并单击 Continue。
  4. 单击 Select plugins to install,安装插件。

  5. 由于连接国外的网络问题,ant 插件不一定能下载成功,建议您先去掉 ant 插件安装。单击 Install 并等待安装完成。

  6. 设置用户名和密码,并单击 Save and Finish。

    至此,您就成功的创建了一个 Jenkins server。

步骤 6 配置 Kubernetes-jenkins-plugin 实现 dynamic slaves provision

  1. 安装 Kubernetes-plugin。

    1. 单击 系统管理 > 管理插件 > 可选插件,搜索 kubernetes plugin,勾选要安装的插件,然后单击 直接安装。

    2. 勾选 安装完成后重启 Jenkins。等待重启完成后 kubernetes-plugin 就安装完成了。

  2. 配置 Jenkins kubernetes-plugin 插件。
    1. 单击 系统管理 > 系统设置,找到 云,然后单击 新增一个云。
    2. 填写配置参数,并单击 Apply。

      其中:

      • Name:kubernetes
      • kubernetes URL:https://kubernetes.default.svc.cluster.local
      • Disable https certificate check:true
      • Jenkins URL:http://jenkins-svc.ci.svc.cluster.local
      • Connect Timeout:5
      • Read Timeout:15

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

步骤 7 Jenkins CI

  1. 新建一个 Pipeline 任务。

  2. 将下面的内容粘贴到 pipeline Script 里,并单击 保存。
    1. podTemplate(label: ‘golang-pod‘, containers: [
    2. containerTemplate(
    3. name: ‘golang‘,
    4. image: ‘registry.cn-hangzhou.aliyuncs.com/spacexnice/golang:1.8.3-docker‘,
    5. ttyEnabled: true,
    6. command: ‘cat‘
    7. ),
    8. containerTemplate(
    9. name: ‘jnlp‘,
    10. image: ‘registry.cn-hangzhou.aliyuncs.com/google-containers/jnlp-slave:alpine‘,
    11. args: ‘${computer.jnlpmac} ${computer.name}‘,
    12. command: ‘‘
    13. )
    14. ]
    15. ,volumes: [
    16. /*persistentVolumeClaim(mountPath: ‘/home/jenkins‘, claimName: ‘jenkins‘, readOnly: false),*/
    17. hostPathVolume(hostPath: ‘/root/work/jenkins‘, mountPath: ‘/home/jenkins‘),
    18. hostPathVolume(hostPath: ‘/var/run/docker.sock‘, mountPath: ‘/var/run/docker.sock‘),
    19. hostPathVolume(hostPath: ‘/tmp/‘, mountPath: ‘/tmp/‘),
    20. ])
    21. {
    22. node (‘golang-pod‘) {
    23. container(‘golang‘) {
    24. git url: ‘https://github.com/spacexnice/blog.git‘ , branch: ‘code‘
    25. stage(‘Build blog project‘) {
    26. sh("make")
    27. }
    28. }
    29. }
    30. }

  3. 单击 开始构建。

    通过构建日志观察任务的执行情况,您会发现 Jenkins Server 会通过 Kubernetes 启动一个 Pod 作为 Jenkins slave 执行构建 Pipeline。

原文地址:https://www.cnblogs.com/cheyunhua/p/8489695.html

时间: 2024-08-05 14:43:26

Jenkins CI/CD on Kubernetes with dynamic slaves的相关文章

Jenkins CI CD

原文:https://www.sunjianhua.cn/archives/jenkins-ci-cd.html 1.安装git 以下为简单应用,适合无gitlab服务器用户. #在git服务器(192.168.2.163) $ iptables F $ useradd git $ passwd git $ su git $ mkdir -p ./repos/app.git $ cd ./repos/app.git $ git --bare init && ls -a #在其他机器上clo

kubernetes之CI/CD工具jenkins第二篇,helm的使用

1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用: 1. 概述: ?? 在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用.主要是jenkins slave pod自动创建和销毁,当有jenkins job任务执行的时候,就会自动创建一个jenkins slave pod.在本篇博文中,我们将介绍jenkins生成slave pod的另外一种方法,就是在pipeline脚本里面定义slave pod的镜像等,同时将Dockerfile.Je

Jenkins与Docker/Kubernetes的自动化CI/CD流水线实践--免费直播课等你来约

直播老师简介: 李振良·奇虎360-高级运维工程师,主要负责360浏览器业务运维.7年互联网运维工作经验,具备丰富的运维实战经验,曾主导容器云平台建设并将业务容器化部署 老师博客专栏地址:基于Kubernetes企业级容器云平台落地与实践 直播课内容大纲: 1.什么是CI/CD?2.Jenkins Pipeline2.Jenkins与Docker发布JAVA项目3.Jenkins与Kubernetes发布JAVA项目 直播时间: 2018年7月26日(本周四)晚8点30分--9点30分 QQ群直

jenkins的容器化部署以及k8s应用的CI/CD实现

1. 使用Helm安装Mysql: ??上一篇博文谈到了如何使用Helm安装Redis和RabbitMQ,下来我们来聊聊如何用Helm安装mysql. ??本人对于Mysql数据库不是非常熟悉,因为我们公司的分工比较明确,数据库这块的工作主要由DBA负责,运维同学只负责应用的维护. ??按照我们前面博文的描述,首先是在官方文档查看helm安装mysql的书名: https://github.com/helm/charts/tree/master/stable/mysql ??我根据官方文档的描述

docker与jenkins的自动化CI/CD流水线实战

docker与jenkins的自动化CI/CD流水线实战 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现一套CI自动化发布流程. 高效的CI/CD环境可以获得: ? 及时发现问题 ? 大幅度减少故障率 ? 加快迭代速度 ? 减少时间成本 一.发布流程设计 总结:开发===>提交代码到Git/Svn===>推送到Jenkins====>通

【Kubernetes系列】第7篇 CI/CD之组件部署

前言 应对敏捷开发的需求,对CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,赋能团队的开发.运维. 核心组件 组件名称 版本 备注 kubernetes v1.15.3 10.0.0.182:6443 jenkins 2.176.2 集群内部署/ namespace: devops gitlab 11.8 主机部署 harbor v1.7.4 docker-compose部署

5步实现规模化的Kubernetes CI/CD 流水线

一.背景在近几年,Kubernetes迅速成为了容器编排的事实上的开源标准.与虚拟机不同,Kubernetes在抽象化基础架构的同时可靠地大规模编排容器,这可以帮助开发人员将工作负载与基础架构的复杂性质分开.Kubernetes是CI/CD自动化的理想选择,因为它提供了许多内置功能,这些功能使应用程序部署实现标准化和可重用,提高了开发人员的生产力,并加快了云原生应用程序的采用.Platform9是成立于2013年的云服务提供商,能够提供业界唯一由SaaS管理的混合云解决方案,使用户能够快速采用云

Jenkins + k8s 实现企业 CI/CD 落地

一.概述 1.1.环境介绍 我们使用的是 AWS 的 EC2 来搭建我们的集群,安装方式使用 kubeadm 来进行安装,如果使用二进制安装,可以参考我相关文档. 系统版本:ubuntu 16.04 k8s 版本:1.17.1 docker 版本:18.06-ce 1.2.流程图 1.3.集群配置 名称 配置 内网IP 外网IP k8s-master 2核4GB 172.31.20.184 54.226.118.74 k8s-node1 2核4GB 172.31.27.69 52.90.221.

Kubernetes如何加速UCloud内部代码部署的CI/CD流程

UCloud内部长期使用 Gitlab 来管理代码.虽然Gitlab作为一套开源平台已很优秀,但我们对于其能为CI/CD提供的敏捷性并不十分满意,内部实践中的代码发布周期仍需按天计算.为此,我们打造了一个基于Kubernetes的内部容器服务平台(名为KUN),用于托管内部服务,并将Gitlab对接到KUN平台,从而借助Kubernetes的云原生优势,获得更好的CI/CD效果.这套系统运行一年内,Gitlab的Pipeline一共触发了994次,执行了约20000+次Job,在测试环境和正式环