跳转至

流水线节点(Agent)

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

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

Kubernetes Pod 模板介绍

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

内置 Label 说明

应用工作台通过 podTemplate 能力声明了 Label,提供了一些内置 SDK 供用户使用。

SDK

底层运行时都支持 Docker 和 Podman,而操作系统有所区别:

SDK(Label) 版本信息 默认容器名称 操作系统
base - base Centos 7.9
Ubuntu 22.04
maven java: 8
maven: 3.9.9
maven Centos 7.9
Ubuntu 22.04
maven-jdk11 java: 11
maven: 3.9.9
maven Centos 7.9
Ubuntu 22.04
maven-jdk17 java: 17
maven: 3.9.9
maven Ubuntu 22.04
maven-jdk21 java: 21
maven: 3.9.9
maven Ubuntu 22.04
go go: 1.17.13 go Centos 7.9
Ubuntu 22.04
go-1.18.10 go: 1.18.10 go Ubuntu 22.04
go-1.20.14 go: 1.20.14 go Ubuntu 22.04
go-1.22.6 go: 1.22.6 go Ubuntu 22.04
python python: 3.8.19
python、python3 均指向 python3.8
python Centos 7.9
Ubuntu 22.04
python-2.7.9 python: 2.7.9
python、python2 均指向 python2.7
python Ubuntu 22.04
python-3.10.9 python: 3.10.9
python、python3 均指向 python3.10
python Ubuntu 22.04
python-3.11.9 python: 3.11.9
python、python3 均指向 python3.11
python Ubuntu 22.04
node.js node: 16.20.2
yarn: 1.22.22
nodejs Centos 7.9
Ubuntu 22.04
node.js-18.20.4 node: 18.20.4
yarn: 1.22.22
nodejs Ubuntu 22.04
node.js-20.17.0 node: 20.17.0
yarn: 1.22.22
nodejs Ubuntu 22.04

内置命令行工具

内置工具 版本 操作系统
podman Ubuntu 22.04:5.1.0、
Centos 7.9:3.0.1
Ubuntu 22.04、Centos 7.9
docker 27.1.2 Ubuntu 22.04、Centos 7.9
helm 3.15.4 Ubuntu 22.04、Centos 7.9
kubectl v1.31.0 Ubuntu 22.04、Centos 7.9
argocd v2.12.1 Ubuntu 22.04、Centos 7.9
argo rollouts v1.7.2 Ubuntu 22.04、Centos 7.9
sonar_scanner 4.8.0.2856 Ubuntu 22.04、Centos 7.9
yq v4.44.3 Ubuntu 22.04、Centos 7.9
make - Ubuntu 22.04、Centos 7.9
build-essential Ubuntu 22.04
libcurl4-openssl-dev - Ubuntu 22.04
libssl-dev - Ubuntu 22.04
wget - Ubuntu 22.04、Centos 7.9
git - Ubuntu 22.04、Centos 7.9
curl - Ubuntu 22.04、Centos 7.9
autoconf - Ubuntu 22.04、Centos 7.9
zip - Ubuntu 22.04、Centos 7.9
unzip - Ubuntu 22.04、Centos 7.9
jq - Ubuntu 22.04、Centos 7.9
locales - Ubuntu 22.04
vim - Ubuntu 22.04、Centos 7.9
gettext - Ubuntu 22.04、Centos 7.9
tree - Ubuntu 22.04、Centos 7.9
gcc - Centos 7.9
gcc-c++ - Centos 7.9
curl-devel - Centos 7.9
glibc-common - Centos 7.9

Note

注意 Centos 7.9 已经 EOL,目前保留仅是为了兼容旧版本的流水线构建环境数据,建议新环境统一使用 Ubuntu 22.04 支持的 SDK。

使用内置 Label

  • 可以在 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

自定义 podTemplate

如果对构建环境有特定要求,可以参考创建自定义镜像来实现。

评论