一.简介

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

三.节点加入

系统管理---节点管理

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

新建节点

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

自定义名称

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

填写节点信息

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

添加凭证

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

填写相关信息

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

选中刚创建凭证

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

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

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

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

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

这样就OK了

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

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

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

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

复制一个原来的项目

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

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

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

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

代码上线之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
  • 1.

#控制台输出报错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> --> 注释掉
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

#控制台输出报错3

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

解决:

#slave安装docker
yum -y install docker
systemctl enable docker
systemctl start docker
  • 1.
  • 2.
  • 3.
  • 4.

#控制台输出报错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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

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

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