前几天在用kubesphere的devops时,发现可以非常的方便使用官方的agent。如下

pipeline {
  agent {
    node {
      label 'go'
    }
  }
}

在上面直接使用label就可以调用agent。但是官方的agent大多时候并不适合真实生产环境。

1. 创建镜像

预先准备好生产环境的虚拟机(包含必要的运行库,java1.8以上和sonar客户端)。在虚拟机中打包好文件。

tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

2. 导入镜像

由于我没有创建镜像仓库,就直接将镜像导入到本机中

cat system.tar | docker import - centos:7.1 

下面分别提供kubesphere加载agent和jenkins加载agent的两种方法

3.1 在jenkins页面上配置agent

  1. 进入jenkins 页面(http://***:30180/)
  2. 选择Manage Jenkins -> Configure System 在系统设置的最后面配置上自己想要的agent。下图是官方配置

    注意:在我构建的镜像中/etc/profile 不起作用,所以我在配置agent的时候添加了环境变量。

3.2 在kubepshere设置jenkins的配置agent

在配置好agent之后,jenkins突然挂掉了。这样服务重启之后每次都需要重新配置。为此我们需要一劳永逸。

  1. 打开jenkins容器,选择casc配置文件。
  2. 修改配置并保存。

    官方go的配置
  3. 在jenkins 页面上重新加载配置,Manage Jenkins -> Configuration as Code。
  4. 如果发生错误(非语法问题),请在jenkins容器中检查配置文件是否已更新。
cat /var/jenkins_home/casc_configs/jenkins.yaml

4. 在安装部署的时候使用自定义agent

  1. 修改源代码
ks-installer/roles/ks-devops/jenkins/templates/jenkins-casc-config.yml.j2
  1. 在ks-installer容器中修改
    如果是用kubectl删除jenkins容器。即使在ks-installer容器中修改,也无法生效。ks-installer容器修改支持尚未使用devops功能。
    在如下文件中修改
    vi /etc/kubesphere/jenkins/jenkins-casc-config.yml
    9 个月 后

    直接执行命令使用以下方式修改,不要在jenkins UI修改,也不要在kubesphere UI修改,都会被覆盖:

    kubectl -n kubesphere-devops-system edit cm jenkins-casc-config
     
    kubectl -n kubesphere-devops-system delete pods -l app=ks-jenkins

    修改完成重启ks-jenkins pod,登陆jenkins UI可以看到已经修改成功