一.简介

jenkins分布式架构,可一主master多从slave,从slave作为代理,即把jenkins的任务分开执行,如slave1运行maven编译、slave2运行docker build构建镜像、salve3运行ansible剧本等。

master上面安装的docker、maven、ansible,以及hosts配置和私有仓库相关配置,在slave上根据情况也需要相应的配置。

二.从节点部署

1.安装jdk11 因为master安装时是jdk11

#卸载原有的openjdk-1.8
rpm -qa | grep jdk*
yum -y remove java-1.8.0-openjdk*
#安装openjdk 11
yum list | grep java-11
yum -y install java-11
#版本查看
source /etc/profile
java --version

#关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0

三.节点加入

系统管理---节点管理

代码上线之jenkins主从 分布式_jenkins

新建节点

代码上线之jenkins主从 分布式_jenkins_02

自定义名称

代码上线之jenkins主从 分布式_分布式_03

填写节点信息

代码上线之jenkins主从 分布式_分布式_04

添加凭证

代码上线之jenkins主从 分布式_jenkins_05

填写相关信息

代码上线之jenkins主从 分布式_主从_06

选中刚创建凭证

代码上线之jenkins主从 分布式_主从_07

保存后 稍等就看到添加成功

代码上线之jenkins主从 分布式_jenkins_08

点进去  可以看日志和构建的任务执行状态

代码上线之jenkins主从 分布式_主从_09

这样就OK了

代码上线之jenkins主从 分布式_jenkins_10

四.从节点执行任务呢示例

1.jenkins复制一个原来的任务,放在slave上执行

代码上线之jenkins主从 分布式_分布式_11

复制一个原来的项目

代码上线之jenkins主从 分布式_jenkins_12

2.General---限制项目的运行节点---填写slave1的标签

代码上线之jenkins主从 分布式_jenkins_13

3.保存后 Build with Parameters---构建历史---控制台输出

代码上线之jenkins主从 分布式_jenkins_14

代码上线之jenkins主从 分布式_主从_15

五.故障排错

#控制台输出报错1

stderr: No ECDSA host key is known for 192.168.77.147 and you have requested strict checking.

Host key verification failed.

解决:slave1s上手动连接gitlab一次    

ssh root@192.168.77.147

#控制台输出报错2

ERROR: Maven Home /app/tools/maven doesnt exist

解决:slave1上安装maven到/app/tools/目录下

#下载maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
#上传maven安装包到任意目录
rz apache-maven-3.8.8-bin.tar.gz
#解压
mkdir -p /app/tools
tar -xf apache-maven-3.8.8-bin.tar.gz -C /app/tools
#软链接
ln -s /app/tools/apache-maven-3.8.8/ /app/tools/maven
#配置环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
#版本查看
mvn --version
#修改maven源为国内源 在<mirrors>下一行加入,即写在<mirrors> 中间 </mirrors>
vim /app/tools/maven/conf/settings.xml
<mirror>
    <id>maven-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>
#原有的<mirror>  </mirror> --> 注释掉

#控制台输出报错3

/tmp/jenkins12374773886147685898.sh:行12: docker: 未找到命令

解决:

#slave安装docker
yum -y install docker
systemctl enable docker
systemctl start docker

#控制台输出报错4

Step 1/8 : FROM alpine:3.20

error pulling image configuration:

解决:

#slave上配置harbor相关信息,基础镜像从私有仓库harbor拉取
#jenkins的slave上配置
echo "192.168.77.133 alibaby007.com" >>/etc/hosts
mkdir -p /etc/docker/certs.d/alibaby007.com/
cd /etc/docker/certs.d/alibaby007.com/
scp root@192.168.77.133:/home/harbor/ssl/alibaby007.com.crt .
#添加harbor仓库地址 可配置可不配置
cat /etc/docker/daemon.json
{
  "insecure-registries" : ["alibaby007.com"]
}
#重新加载daemon重启docker
systemctl daemon-reload
systemctl restart docker
#从harbor拉取镜像alpine3.20
#登录harbot
docker login alibaby007.com -ualibaby -pxxxxxxx
#拉取镜像
docker pull alibaby007.com/nginxwebui/alpine:3.20
#重新打tag
docker tag alibaby007.com/nginxwebui/alpine:3.20 alpine:3.20

以上问题,若slave与master配置一样,salve配置改为“尽可能使用这个节点”,同时上面的错误也不存在

代码上线之jenkins主从 分布式_主从_16