两种常见挂载Jenkins slave节点的方法

1、挂载slave节点的方法

在Jenkins的Master上,进入Mange node页面,可以管理node节点,例如新加、删除等操作。
新加node节点的页面如下:


其中,
Name是节点名字;
Description是节点描述;
# of executors是该节点可以同时运行job的数量;
Remote root directory主要是添加了workspace的目录;
Label是该节点的标签名,在运行job的时候,可以使用该标签指定job运行的node;
Usage是你如何使用该节点,通常选择Utilize this node as much as possible,即尽量使用该节点。
Lance method:是将该node挂载到master上的方法。这里有四个选项,常用的是前两选项,即“Launch slave agents on Unix machine via SSH”和“Launch slave agents via Java Web Start”。本文将详细介绍这两种挂载node的方法。
Availability是你何时连接该节点。通常选择一直连接即可,即“Keep this slave on-line as much as possible”。

2、通过SSH连接node

关于SSH连接slave,jenkins有如下描述:

Launch slave agents on Unix machines via SSH
Starts a slave by sending commands over a secure SSH connection. The slave needs to be reachable from the master, and you will have to supply an account that can log in on the target machine. No root privileges are required.

这段描述的意思是说,选择此种方式连接时,master和slave必须是能够通过ssh进行连接的,必须有slave机器的账号才行,但不要求必须是root账号。
这种方式的前提是需要安装SSH Slaves plugin插件。
这种方式的步骤如下:
1、输入slave节点的IP。
2、Add Credentials:
有如下两种方式:
1)通过Username with password方式
需要知道slave机器的用户名和密码,见下图:


2)通过SSH Username with private key方式
需要先在master机器上生成ssh key pair。生成的 public key放到slave机器的 ~/.ssh/authorized_keys里面。然后chmod 600 ~/.ssh/authorized_keys。
然后,添加连接slave的credential,见下图:

这两种方式的Scope选项,我选择的是System,表示这个Credentials仅仅是用来master和node进行连接用的。还有另外一种是“Global(Jenkins、nodes、items、child items)”,这种scope的Credential可以用来连接git等其他机器。具体选择哪种scope,根据自己的需要。就连接slave这个需求来说,哪种scope的credential都可以。
Username填写在master上生成key pair时使用的用户名。
Private key选择From the jenkins master ~/.ssh
【扩展知识】
Jenkins的SSH Credentials Plugin插件,可以集中管理这些ssh 的key。安装完这个插件,可以在Jenkins上看到这样的页面

这个页面可以对credentials进行添加、删除、修改等操作。在这里设置的credentials在jenkins的其他需要credentials的地方,可以通过下拉菜单选择使用,比如添加slave时,可以直接在Credentials下拉菜单里选择对应的credential就行:

还有git clone代码时:

此时一定要把在master上生成的 public key添加到github账号的的Profile setting页面里的SSH Keys Settings中。

3、通过JNLP连接node

关于这种方式jenkins有如下描述:

Launch slave agents via Java Web Start
Starts a slave by launching an agent program through JNLP. The launch in this case is initiated by the slave, thus slaves need not be IP reachable from the master (e.g. behind the firewall.) It is still possible to start a launch without GUI, for example as a Windows service.

这段话的意思是说,JNLP方式连接salve,不需要master必须能够ssh连接到slave,只需要两者能够ping通即可。这种连接方式的slave还可以作为服务运行在slave的机器上。
这种方式连接slave的步骤如下:


按照上面图片的设置方式设置完成后,点击save,就建好了一个slave节点。如下图所示。

接下来的任务是将该节点连到master上。与ssh方式是master主动连接slave不同,这种JNLP方式是slave主动连接master。
登陆到slave机器上,运行上图中的java -jar 命令,即可将slave连接到master上了。

写了一个脚本,功能主要有:1、可以直接启动slave;2、将slave作为服务安装在slave机器上;3、当slave服务停止后,自动重启。
脚本地址:
https://github.com/liuchunming033/setup_jenkins_slave

参考资料

http://www.nerdnuts.com/2014/06/jenkins-managing-ssh-keys/

### 如何使用 Jenkins Slave Docker 镜像构建 CI/CD 流水线 #### 准备工作 为了确保能够顺利运行 Jenkins 和其 Slave 节点,在开始之前需要确认 Kubernetes 集群已经配置好,并且可以正常访问。另外,还需要安装 `kubectl` 工具以便于管理集群资源。 #### 创建持久卷声明 (Persistent Volume Claim, PVC) 对于生产环境来说,保存构建历史记录非常重要。因此建议先创建一个 PersistentVolumeClaim 来为 Jenkins节点提供稳定的数据存储位置[^4]: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-home-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi ``` 可以通过如下命令应用此 YAML 文件来创建 PVC 对象: ```bash kubectl apply -f path/to/pvc-definition.yaml ``` #### 构建并推送自定义 Jenkins Slave 镜像至 Harbor 私有仓库 如果想要定制化自己的 Jenkins Slave 环境,则可以根据项目需求制作专属的基础镜像文件(Dockerfile),之后将其推送到内部使用的私有 Harbor 注册表中去[^2]: ```dockerfile FROM jenkins/inbound-agent:latest-alpine AS base USER root RUN apk add --no-cache git openssh-client python3 py3-pip && \ pip install --upgrade pip setuptools wheel WORKDIR /home/jenkins/ COPY . . CMD ["jenkins-agent"] ``` 完成上述操作后就可以利用下面这条指令把新构建出来的镜像上传给 Harbor 了: ```bash docker build -t harbor.yourdomain.com/project/my-jenkins-slave:vX.X . docker login harbor.yourdomain.com docker push harbor.yourdomain.com/project/my-jenkins-slave:vX.X ``` 请注意替换其中的域名、版本号以及路径参数以匹配实际场景下的设置情况。 #### 定义 Pod Template 并集成到 Pipeline 中 为了让 Jenkins 可以动态分配任务给不同的 Slave 实例执行,可以在 Declarative Pipeline 或 Scripted Pipeline 的配置里指定相应的 podTemplate() 方法调用来描述所需的工作空间规格。这里给出一段简单的 Groovy 代码片段用于说明如何实现这一点: ```groovy podTemplate( label: 'mypod', containers: [ containerTemplate(name: 'maven', image: 'harbor.yourdomain.com/project/maven:jdk8', ttyEnabled: true), containerTemplate(name: 'golang', image: 'harbor.yourdomain.com/project/golang:alpine') ], volumes: [ persistentVolumeClaim(claimName: 'jenkins-home-pvc', mountPath: '/var/jenkins_home') ] ){ node('mypod') { stage('Run Maven Build'){ container('maven'){ sh 'mvn clean package' } } stage('Build Go Application'){ container('golang'){ sh ''' go version go build main.go ''' } } } } ``` 这段脚本会告诉 Jenkins 在每次触发该流水线作业时都自动拉取最新的镜像实例作为临时计算单元参与进来;同时也会挂载先前准备好的数据卷使得不同次之间产生的中间产物得以保留下来供后续分析查阅之用。 #### 总结 综上所述,通过合理规划和设计基于Kubernetes平台上的Jenkins Master-Slave架构体系结构,不仅有助于提高持续交付过程中的灵活性与效率,而且还可以有效降低运维成本开销。以上就是关于怎样运用 Jenkins Slave Docker Image 进行 CI/CD 自动化的全部介绍内容。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值