第3章 为Jenkins添加静态agent节点_分享


 

本文主要阐述如何为Jenkins Server来添加Agent节点。静态节点的配置方式 VM、Docker、Kubernetes。

Jenkins采用分布式架构,分为server节点和agent节点。server节点也是可以运行构建任务的,但我们一般使其主要来做任务的调度。(毕竟server节点挂了就都...)agent节点专门用于任务的执行。随着现在容器的盛行,我们可以将server节点和agent节点在容器或者基于Kubernetes中部署。关于agent节点借助容器可以实现动态的资源分配等等好处。agent节点可以分为静态节点和动态节点。静态节点是固定的一台vm虚机或者容器。动态节点是随着任务的构建来自动创建agent节点。

1.1 Java Web方式

Launch agent by connecting it to the master

使用Java Web Start。在这种情况下,必须在Agent机器上打开JNLP文件,这将建立到Jenkins服务器的TCP连接。这意味着不需要Jenkins服务器访问Agent;而是Agent能够链接到Jenkins Server即可。

如果通过“配置全局安全配置”页面启用了安全性,则可以自定义Jenkins服务器监听的Agent连接的端口。也就是相当于Agent节点会开启一个随机的端口与Server中配置的端口连接。所以一般申请网络权限我们需要开放Jenkins服务器的监听端口给Agent连接。

默认情况下,Agent将启动GUI,但是也可以在没有GUI的情况下运行代理,例如作为Windows服务。在Linux中我们一般会使用nohup等方式保证进程在后台运行。

首先,我们在Jenkins Server页面>节点管理菜单中添加一个Jenkins Agent。在DevOps流水线实践教程中,我们在添加Agent节点的时候选择的是java web start方式启动的agent与Jenkins Server的连接。现在很多同学反馈找不到此选项了,开始我以为是汉化问题。后来发现新版本中修改了名称为Launch agent by connecting it to the master。如果你遇到了此类问题,可以选择Launch agent by connecting it to the master选项。

第3章 为Jenkins添加静态agent节点_分享_02

填写节点的名称等信息。

第3章 为Jenkins添加静态agent节点_分享_03

第3章 为Jenkins添加静态agent节点_分享_04

第3章 为Jenkins添加静态agent节点_分享_05

1.1.1 VM方式启动

首先,我们点开agent页面,获取agent.jar和secret信息。

第3章 为Jenkins添加静态agent节点_分享_06

我们在一台Linux服务器中,下载agent.jar和启动连接。

  •  
wget http://192.168.1.200:30080/jnlpJars/agent.jarjava -jar agent.jar -jnlpUrl http://192.168.1.200:8080/computer/test01/slave-agent.jnlp -secret d5bd27fc1dfa4c5e886b95fc98538f4a7399c5d239783f89e4502a6e56f8a512 -workDir "/var/lib/jenkins"

链接成功的日志:

  •  
INFO: Agent discovery successful  Agent address: 192.168.1.200  Agent port:    30081  Identity:      0b:a1:da:6c:8e:e2:ca:f8:17:f6:b7:ee:cb:ff:84:0dJul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener statusINFO: HandshakingJul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener statusINFO: Connecting to 192.168.1.200:30081Jul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener statusINFO: Trying protocol: JNLP4-connectJul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener statusINFO: Remote identity confirmed: 0b:a1:da:6c:8e:e2:ca:f8:17:f6:b7:ee:cb:ff:84:0dJul 24, 2020 5:57:30 AM hudson.remoting.jnlp.Main$CuiListener statusINFO: Connected

使用nohup后台运行agent。

  •  
nohup java -jar agent.jar -jnlpUrl http://192.168.1.200:8080/computer/test01/slave-agent.jnlp -secret d5bd27fc1dfa4c5e886b95fc98538f4a7399c5d239783f89e4502a6e56f8a512 -workDir "/var/lib/jenkins" &

1.1.2 Docker方式

docker的方式比较简单,第一步下载镜像,第二步启动镜像。注意参数要写对。

  •  
docker pull jenkins/inbound-agent:alpine
docker run --init jenkins/inbound-agent:alpine -url http://192.168.1.200:30080 -workDir=/home/jenkins/agent d5bd27fc1dfa4c5e886b95fc98538f4a7399c5d239783f89e4502a6e56f8a512 test01

1.1.3 Kubernetes方式

在这里我们把agent以静态的方式部署到kubernetes集群中。首先编写一个部署文件,定义好名称空间、镜像、agent配置信息。

  •  
kind: DeploymentapiVersion: apps/v1metadata:  labels:    k8s-app: jenkinsagent-test01  name: jenkinsagent-test01  namespace: devopsspec:  replicas: 1  revisionHistoryLimit: 10  selector:    matchLabels:      k8s-app: jenkinsagent-test01  template:    metadata:      labels:        k8s-app: jenkinsagent-test01      namespace: devops      name: jenkinsagent-test01    spec:      containers:        - name: jenkinsagent-test01          image: jenkins/inbound-agent:alpine          imagePullPolicy: IfNotPresent          resources:            limits:              cpu: 1000m              memory: 2Gi            requests:              cpu: 500m              memory: 512Mi          env:            - name: JENKINS_URL              value: http://192.168.1.200:30080            - name: JENKINS_SECRET              value: d5bd27fc1dfa4c5e886b95fc98538f4a7399c5d239783f89e4502a6e56f8a512            - name: JENKINS_AGENT_NAME              value: test01            - name: JENKINS_AGENT_WORKDIR              value: /home/jenkins/workspace

最后,通过kubectl工具部署到kubernetes集群中。我们可以使用kubectl get 查询pod的状态,也可以通过kubectl logs 查看pod运行的日志信息。

  •  
kubectl create -f jenkins.yamlkubectl get pod -n devopskubectl logs -f jenkinsagent-test01-5644b4bb6b-kh229 -n devops

 

1.2 Launch agents via SSH

首先,创建一个凭据存储服务器认证信息。

第3章 为Jenkins添加静态agent节点_分享_07

然后我们创建一个新的节点,添加以下配置。配置ssh的主机和认证信息。最后保存。

第3章 为Jenkins添加静态agent节点_分享_08保存配置后,agent配置完成。

1.3 创建一个测试的流水线

创建一个测试的pipeline项目,然后填写Jenkinsfile内容。

  •  
pipeline {    agent {        node { label "build"}    }
stages { stage('Hello') { steps { echo 'Hello World' } } }}

第3章 为Jenkins添加静态agent节点_分享_09


到此我们完成了Jenkins Agent的配置,后期我们开始了解Jenkins的一些基础的功能。


第3章 为Jenkins添加静态agent节点_分享_10

历史文章

  • 新Jenkins实践

  • GitLabCI实践专辑
  • Jenkins流水线实践专辑
  • ChatOps微实践

关于作者

泽阳,DevOps领域实践者。专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。

第3章 为Jenkins添加静态agent节点_分享_11