码迷,mamicode.com
首页 > Web开发 > 详细

Jenkins CI/CD on Kubernetes with dynamic slaves

时间:2018-03-01 19:49:21      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:插件安装   man   mount   key   文档   span   lin   masm   efault   

本文档介绍如何通过在 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。

Jenkins CI/CD on Kubernetes with dynamic slaves

标签:插件安装   man   mount   key   文档   span   lin   masm   efault   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!