跳转至

流水线节点(Agent)

Agent 描述了整个 流水线 执行过程或者某个 阶段 的执行环境,必须出现在 描述文件 顶部或每一个 阶段

本文基于 Kubernetes plugin for Jenkins 插件描述如何扩展 Kubernetes 中运行的 Jenkins Agent。

Kubernetes Pod 模板介绍

这个 Kubernetes 插件会在 Jenkins Agent Pod 中运行一个特殊的容器 jnlp ,目的是为了在 Jenkins Controller 和 Jenkins Agent 之间进行通信,所以需要定义其他容器来运行流水线步骤,并且可以通过 container 命令来切换不同的容器。

使用内置 Label

应用工作台通过 podTemplate 能力声明了 7 个 label: basemavenmavenjdk11gogo16node.jspython 。您可以指定具体的 Agent 标签来使用对应的 podTemplate。

  • 可以在 Jenkinsfile 中通过 node('go') 使用 go 的 podTemplate。

    pipeline {
      agent {
        node {
          label 'go'
        }
      }
    
      stages {
        stage('go') {
          steps {
            container('go') {
              sh 'go version'
            }
          }
        }
      }
    }
    
  • 也可以在 编辑流水线 页面上选择类型为 node 且 label 为 go 的 Agent。

    agent-base

内置 Label 环境说明

内置的 Jenkins Agent Label 有以下几种:

名称 类型/版本
容器名称 base
操作系统 centos-7 (7.9.2009)
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)
名称 类型/版本
容器名称 maven
操作系统 centos-7 (7.9.2009)
Jdk openjdk-1.8.0_322
Maven 3.5.3
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)
名称 类型/版本
容器名称 maven
操作系统 centos-7 (7.9.2009)
Jdk openjdk-11.0.19
Maven 3.5.3
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)
名称 类型/版本
容器名称 go
操作系统 centos-7 (7.9.2009)
Go 1.12.10
GOPATH /home/jenkins/go
GOROOT /usr/local/go
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)
名称 类型/版本
容器名称 nodejs
操作系统 centos-7 (7.9.2009)
Node v10.16.3
Yarn 1.16.0
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)
名称 类型/版本
容器名称 python
操作系统 centos-7 (7.9.2009)
Python 3.7.11
podman podman version 3.0.1
Kubectl v1.22.0
内置工具 unzip、which、make(GNU Make 3.82)、wget、zip、bzip2、git (2.9.5)

使用 YAML 自定义 podTemplate

如果需要运行特定环境的 Jenkins Agent,可以在流水线上自定义 Jenkins Agent。

  1. 编辑流水线 页面上选择 Agent 类型为 kubernetes

    agent-kubernets

  2. 点击 YAML 编辑器 ,在对话框中填写 YAML 语句,请参考以下示例:

    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: jnlp
        image: docker.m.daocloud.io/jenkins/inbound-agent:4.10-2  # (1)!
        args:
        - ^${computer.jnlpmac} ^${computer.name}
      - name: golang
        image: golang:1.16.5   # (2)!
        command:
        - sleep
        args:
        - 99d
    
    1. 需要提供 jnlp 镜像的地址,否则会使用默认的"jenkins/inbound-agent"
    2. 填你自定义的镜像
  3. 在 Container 中输入 golang 作为流水线运行的默认容器。

    agent-golang

  4. 要在流水线其他步骤中使用上述示例的其他容器,可以选择 指定容器 填写所需要的容器名称。

    agent-maven

评论