更新时间:2023-08-07 GMT+08:00

Jenkins Master安装部署

Jenkins界面中的词条可能因版本不同而存在一些差异,例如中英文不同等,本文中的截图仅供您参考。

镜像选择

在DockerHub上选择1个相对较新的稳定镜像,本次搭建测试用的Jenkins使用的镜像为jenkinsci/blueocean,该镜像捆绑了所有Blue Ocean插件和功能,不需要再单独安装Blue Ocean插件,详情请参见在Docker中下载并运行Jenkins

准备工作

  • 在创建容器工作负载前,您需要购买一个可用集群(集群至少包含1个4核8G的节点,避免资源不足),详情请参照购买CCE集群创建。

    本实践需要使用Docker in Docker场景,即在容器中运行Docker命令,节点需要选择Docker容器引擎。

  • 若工作负载需要被外网访问,请确保集群中至少有一个节点已绑定弹性IP,或已购买负载均衡实例。

通过CCE安装部署Jenkins

  1. 在CCE控制台,单击左侧栏目树中的“工作负载 > 无状态负载”,单击右侧“创建负载”按钮进入无状态工作负载创建页面。
  2. 填写工作负载基本参数。

    • 负载名称:jenkins(可自定义)。
    • 命名空间:选择Jenkins部署的命名空间,可自行创建。
    • 实例数量:1个。

  3. 填写容器基本信息参数。

    • 镜像名称:jenkinsci/blueocean。请根据实际情况进行选择镜像版本,若不设置版本,则默认拉取latest版本。
    • CPU配额:本例中CPU配额限制为2 Core
    • 内存配额:本例中内存配额限制为2048 MiB
    • 特权容器:如果选择使用单Master部署的Jenkins,必需要开启“特权容器”,使容器获得操作宿主机的权限,否则Jenkins Master容器中无法执行docker命令。
    其他参数默认。
    图1 容器基本信息参数

  4. “数据存储”中的“存储卷声明PVC”页签下,添加持久化存储。

    在弹出的窗口中选择1个云存储卷,并在挂载路径下输入/var/jenkins_home,将云存储挂载到Jenkins容器的/var/jenkins_home目录,供Jenkins保留持久化数据。

    云存储类型可选择“云硬盘EVS”“文件存储SFS”,若没有云存储可单击“创建存储卷声明”创建。

    如选择“云硬盘EVS”类型,要求EVS的可用区与节点可用区一致。

    图2 添加云存储

  5. 给Jenkins容器添加权限,让Jenkins容器中可以执行相关命令。

    1. 确认3中已开启“特权容器”开关。
    2. “数据存储”中的“本地存储”页签下添加本地存储,将主机路径挂载到容器对应路径。
      表1 挂载路径

      存储类型

      主机路径(HostPath)

      挂载路径

      主机路径(HostPath)

      /var/run/docker.sock

      /var/run/docker.sock

      主机路径(HostPath)

      /usr/bin/docker

      /usr/bin/docker

      主机路径(HostPath)

      /usr/lib64/libltdl.so.7

      /usr/lib/x86_64-linux-gnu/libltdl.so.7

      主机路径(HostPath)

      /usr/bin/kubectl

      /usr/local/bin/kubectl

      挂载完成后,如图3所示。
      图3 挂载主机到容器对应路径
    3. “安全设置”中配置“运行用户”为:0(即root用户)。
      图4 配置运行用户

  6. “服务配置”中,设置访问方式。

    Jenkins容器镜像有两个端口:8080和50000,需要分别配置。其中8080端口供Web登录使用,50000端口供Master和Agent连接使用。

    本例中创建了两个Service:

    • 负载均衡 ( LoadBalancer ):仅用于提供Web的外部访问,使用8080端口。您也可以选择使用“节点访问 ( NodePort )”类型的Service提供外部访问。

      Service名称:jenkins(可自定义),容器端口:8080,访问端口:8080,其他默认。

    • 集群内访问(ClusterIP):用于Agent连接Master。Jenkins要求jenkins-web的地址要和jenkins-agent的地址一致,因此包含Web访问的8080端口和Agent访问的50000端口。

      Service名称:agent(可自定义),容器端口1:8080,访问端口1:8080,容器端口2:50000,访问端口2:50000,其他默认。

      本例中,后续步骤创建的Agent均与Master处于同一集群,因此Agent连接使用ClusterIP类型的Service。

      如果Agent需要跨集群或使用公网连接Jenkins Master,请自行选择合适的Service类型。但需要注意的是,Jenkins要求jenkins-web的地址要和jenkins-agent的地址一致,因此Agent连接的地址必须同时开放8080和50000端口,而仅用于Web访问的地址可以只开放8080端口、不开放50000端口。

    图5 添加服务

  7. “高级配置”步骤可以保持默认,直接单击“创建工作负载”,完成工作负载创建。
  8. 在创建成功页面单击“返回工作负载列表”,查看工作负载状态,若显示为“运行中”则jenkins应用已可以正常访问。

    图6 查看工作负载状态

登录并初始化Jenkins

  1. 在CCE控制台,单击左侧栏目树中的“服务发现”,在“服务”页签下查看jenkins的访问方式。

    图7 访问8080端口对应的访问方式

  2. 在浏览器中输入负载均衡的“EIP:8080”,即可打开jenkins配置页面。

    初次访问时界面会提示获取初始管理员密码,该密码可在jenkins的Pod中获取。在执行下述命令之前您需要先通过kubectl连接集群,具体操作请参见通过kubectl连接集群

    # kubectl get pod -n cicd
    NAME                                     READY   STATUS    RESTARTS   AGE
    jenkins-7c69b6947c-5gvlm                 1/1     Running   0          17m
    # kubectl exec -it jenkins-7c69b6947c-5gvlm -n cicd -- /bin/sh
    # cat /var/jenkins_home/secrets/initialAdminPassword
    b10eabe29a9f427c9b54c01a9c3383ae

  3. 首次登录时选择默认推荐的插件即可,并根据页面提示创建一个管理员。完成初始配置后,即可进入Jenkins页面。

修改并发构建数量

  1. 在Jenkins Dashboard页面,单击左侧“Manage Jenkins”,选择“System Configuration > Manage nodes and clouds”,选择目标节点下拉框里的“Configure”,如下图所示:

    • Master和Agent节点均可修改并发构建数量,此处以Master为例。
    • 如果使用Master+Agent模式,建议将Master的并发构建数设置为0,即全部使用Agent进行构建。如果使用单Master模式,则无需修改为0。

  2. 修改执行并发构建的最大数目,示例中修改为2,您可根据实际需求并结合节点性能进行修改该值。