选择 Jenkins Agent

Agent 部分指定整个流水线或特定阶段将在 Jenkins 环境中执行的位置,具体取决于 Agent 部分的放置位置。该部分必须在流水线的顶层定义,但是阶段级别的用法是可选的。有关更多信息,请参阅 Jenkins 的官方文档。

内置的 podTemplate

podTemplate 是用于创建 agent Pod 的模板。 用户可以定义在 Kubernetes 插件中使用的 podTemplate。

当流水线运行时,每个 Jenkins agent Pod 必须具有一个名为 jnlp 的容器用以在 Jenkins 主服务器和 Jenkins agent 之间进行通信。 另外,用户可以在 podTemplate 中添加容器以满足自己的需求。 他们可以选择使用自己的 Pod YAML 来灵活地控制 runtime,并且可以通过 container 命令来切换容器。 请看下面的例子。

  1. pipeline {
  2. agent {
  3. kubernetes {
  4. //cloud 'kubernetes'
  5. label 'mypod'
  6. yaml """
  7. apiVersion: v1
  8. kind: Pod
  9. spec:
  10. containers:
  11. - name: maven
  12. image: maven:3.3.9-jdk-8-alpine
  13. command: ['cat']
  14. tty: true
  15. """
  16. }
  17. }
  18. stages {
  19. stage('Run maven') {
  20. steps {
  21. container('maven') {
  22. sh 'mvn -version'
  23. }
  24. }
  25. }
  26. }
  27. }

同时为了减少降低用户的使用成本,KubeSphere 内置了一些 podTemplate,使用户可以避免 YAML 文件的编写。

在目前版本当中 KubeSphere 内置了 4 种类型的 podTemplate : basenodejsmavengo,并且在 Pod 中提供了隔离的 Docker 环境。

可以通过指定 Agent 的 label 使用内置的 podTempalte,例如要使用 nodejs 的 podTemplate,可以在创建流水线时指定 label 为 nodejs,如下给出示例。

jenkins-agent

  1. pipeline {
  2. agent {
  3. node {
  4. label 'nodejs'
  5. }
  6. }
  7. stages {
  8. stage('nodejs hello') {
  9. steps {
  10. container('nodejs') {
  11. sh 'yarn -v'
  12. sh 'node -v'
  13. sh 'docker version'
  14. sh 'docker images'
  15. }
  16. }
  17. }
  18. }
  19. }

podTemplate base

名称类型 / 版本
Jenkins Agent Labelbase
容器名称base
操作系统centos-7
Docker18.06.0
Helm2.11.0
KubectlStable release
内置工具unzip, which, make, wget, zip, bzip2, git

podTemplate nodejs

名称类型 / 版本
Jenkins Agent Labelnodejs
容器名称nodejs
操作系统centos-7
Node9.11.2
Yarn1.3.2
Docker18.06.0
Helm2.11.0
KubectlStable release
内置工具unzip, which, make, wget, zip, bzip2, git

podTemplate maven

名称类型 / 版本
Jenkins Agent Labelmaven
容器名称maven
操作系统centos-7
Jdkopenjdk-1.8.0
Maven3.5.3
Docker18.06.0
Helm2.11.0
KubectlStable release
内置工具unzip, which, make, wget, zip, bzip2, git

podTemplate go

名称类型 / 版本
Jenkins Agent Labelgo
容器名称go
操作系统centos-7
Go1.11
GOPATH/home/jenkins/go
GOROOT/usr/local/go
Docker18.06.0
Helm2.11.0
KubectlStable release
内置工具unzip, which, make, wget, zip, bzip2, git