环境
- centos 7
- jenkins 2.121.1
前言
jenkins集群是必须搭建的,可以提高部署效率,每次只是部署几个job自然不会出现问题,如果一次要执行100个呢?试过就知道有多慢了!
搭建
jenkins-master只负责分发构建任务.
搭建之前,我先把几个关键点梳理下:
- jenkins主节点创建job到目标部署主机的ssh免密登录密钥信息,在集群中的jenkins从节点如何获取?
- jenkins主节点数据必须持久化到本地磁盘
Pull jenkins images
1 | $ docker pull jenkins/jenkins:lts |
Jenkins master and Mount data volume
Build Dockerfile: jenkins-data and jenkins-master
1 | $ docker build -f jenkins-data-dockerfile -t jenkins-data . |
Run jenkins-master
1 | # 创建用户持久化jenkins数据文件的目录及日志目录. |
Run jenkins-slave in slave machine
1 | $ docker run -ti -d \ |
Jenkins master add slave node
添加登录slave的用户名密码
Jenkins->Credentials
这里可以添加root用户,避免一些权限问题.
添加节点
Jenkins->系统管理->管理节点
指定远程工作目录,如果是用jenkins_slave用户时注意/home/jenkins_home需要jenkins_slave权限.为了方便起见,这里就直接使用root用户
同步jenkins-master的密钥及相关脚本
这里我采用的做法是配置job,通过job将.ssh/id_rsa, .ssh/id_rsa.pub,.ssh/known_hosts拷贝到slave中(见rsa_sysnc.sh脚本).
(所有脚本proxy-scripts已同步到git上.)
新建同步job
上传dockerfile到docker hub个人仓库.
参考
Getting started with Docker 官方,推荐
Docker Volume 之权限管理
Get Started with Jenkins 2.0 with Docker
Official Jenkins Docker image
附录
jenkins-data-dockerfile
1 | $ vim jenkins-data-dockerfile |
jenkins-master-dockerfile(待补充插件列表)
1 | $ vim jenkins-master-dockerfile |
jenkins-slave-dockerfile
1 | FROM centos:centos7 |
jenkins-slave-swarm-dockerfile
碰到的问题
场景一:jenkins-master为较早创建,需要扩展jenkins-slave
jenkins-master为较早创建的,其中全局工具配置里jdk路径、maven路径、工作空间路径等都是已经确定好的.在创建jenkins-slave时,需要保持与jenkins-master一致.(或者修改主master的相关路径)
- jdk安装路径一致
- maven安装路径一致
- 工作空间(workspace)路径一致
jenkins->全局工具配置
jenkins->系统设置
Jenkins默认的内置工作空间为系统用户的根目录下,其文件夹名称为”.jenkins”.如果设置了JENKINS_HOME则使用.