# 流水线节点(Agent)
Agent 描述了整个 __流水线__ 执行过程或者某个 __阶段__ 的执行环境,必须出现在 __描述文件__ 顶部或每一个 __阶段__ 。
本文基于 [Kubernetes plugin for Jenkins](https://plugins.jenkins.io/kubernetes/) 插件描述如何扩展 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。
```groovy
pipeline {
agent {
node {
label 'go'
}
}
stages {
stage('go') {
steps {
container('go') {
sh 'go version'
}
}
}
}
}
```
- 也可以在 **编辑流水线** 页面上选择类型为 **node** 且 label 为 **go** 的 Agent。
![agent-base](https://docs.daocloud.io/daocloud-docs-images/docs/amamba/images/agent-base.jpeg)
## 自定义 podTemplate
如果对构建环境有特定要求,可以参考[创建自定义镜像](../../../quickstart/jenkins-custom.md#_1)来实现。