11

新Jenkins实践- 第3章 为Jenkins添加静态agent节点-devops

 3 years ago
source link: https://blog.51cto.com/11064706/2512984
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文主要阐述如何为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选项。

新Jenkins实践- 第3章 为Jenkins添加静态agent节点

填写节点的名称等信息。

新Jenkins实践- 第3章 为Jenkins添加静态agent节点
新Jenkins实践- 第3章 为Jenkins添加静态agent节点
新Jenkins实践- 第3章 为Jenkins添加静态agent节点

1.1.1 VM方式启动

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

新Jenkins实践- 第3章 为Jenkins添加静态agent节点

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

wget http://192.168.1.200:30080/jnlpJars/agent.jar
java -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:0d
Jul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Jul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to 192.168.1.200:30081
Jul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Jul 24, 2020 5:57:29 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 0b:a1:da:6c:8e:e2:ca:f8:17:f6:b7:ee:cb:ff:84:0d
Jul 24, 2020 5:57:30 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: 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: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: jenkinsagent-test01
  name: jenkinsagent-test01
  namespace: devops
spec:
  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.yaml
kubectl get pod -n devops
kubectl logs -f jenkinsagent-test01-5644b4bb6b-kh229 -n devops

1.2 Launch agents via SSH

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

新Jenkins实践- 第3章 为Jenkins添加静态agent节点

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

新Jenkins实践- 第3章 为Jenkins添加静态agent节点

保存配置后,agent配置完成。

1.3 创建一个测试的流水线

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

pipeline {
    agent {
        node { label "build"}
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
新Jenkins实践- 第3章 为Jenkins添加静态agent节点

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK