创建自定义 Builder

如何为 Jenkins X 创建一个自定义 Builder

在 Jenkins X 中,可以创建字段自定义的 Builder (也就是 POD templates)或覆盖已有的。你只需要基于 builder-base

从零创建一个自定义 Builder

Builder 镜像

首先,您需要为 Builder 创建一个 docker 镜像。从 Dockerfile 开始的一个实例可能类似于:

FROM jenkinsxio/builder-base:latest

# Install your tools and libraries
RUN yum install -y gcc openssl-devel

CMD ["gcc"]

现在,您可以构建并发布这个镜像到您的 registry:

export BUILDER_IMAGE=<YOUR_REGISTRY>/<YOUR_BUILDER_IMAGE>:<VERSION>
docker build -t ${BUILDER_IMAGE} .
docker push ${BUILDER_IMAGE}

别担心,当新的镜像需要构建时,您无需每次手动执行这些步骤。Jenkins X 可以为您管理这些。您只需要把 Dockerfile 推送到类似于这个代码仓库中。然后,根据您的组织名称来调整 Jenkinsfile ,并使用下面的命令导入 Jenkins X 平台:

jx import --url <REPOSITORY_URL>

之后,您每次推送一个变更,Jenkins X 将会自动地构建和发布镜像。

安装 Builder

当您安装或者升级 Jenkins X 时就可以安装您的 Builder 了。

在您的 ~/.jx/ 目录下创建文件 myvalues.yaml 并写入下面内容:

jenkins:
  Agent:
    PodTemplates:
      MyBuilder:
        Name: mybuilder
        Label: jenkins-mybuilder
        volumes:
        - type: Secret
          secretName: jenkins-docker-cfg
          mountPath: /home/jenkins/.docker
        EnvVars:
          JENKINS_URL: http://jenkins:8080
          GIT_COMMITTER_EMAIL: jenkins-x@googlegroups.com
          GIT_AUTHOR_EMAIL: jenkins-x@googlegroups.com
          GIT_AUTHOR_NAME: jenkins-x-bot
          GIT_COMMITTER_NAME: jenkins-x-bot
          XDG_CONFIG_HOME: /home/jenkins
          DOCKER_CONFIG: /home/jenkins/.docker/
        ServiceAccount: jenkins
        Containers:
          Jnlp:
            Image: jenkinsci/jnlp-slave:3.14-1
            RequestCpu: "100m"
            RequestMemory: "128Mi"
            Args: '${computer.jnlpmac} ${computer.name}'
          Dlang:
            Image: <YOUR_BUILDER_IMAGE>
            Privileged: true
            RequestCpu: "400m"
            RequestMemory: "512Mi"
            LimitCpu: "1"
            LimitMemory: "1024Mi"
            Command: "/bin/sh -c"
            Args: "cat"
            Tty: true

根据需要替换 Builder 名称和镜像。

您可以继续安装 Jenkins X ,然后 Builder 将会自动添加到平台。

使用 Builder

现在,您的 Builder 已经在 Jenkins 中安装了,您可以在 Jenkinsfile 中轻松地引用:

pipeline {
    agent {
        label "jenkins-mybuilder"
    }
    stages {
      stage('Build') {
        when {
          branch 'master'
        }
        steps {
          container('mybuilder') {
              // your steps
          }
        }
      }
    }
    post {
        always {
            cleanWs()
        }
    }
}

覆盖已有的 Builder

Jenkins X 自带了很多预安装的 Builder,在安装或升级过程中可以根据需要覆盖。

您只需要基于基础 Builder 镜像或者Builder 镜像 自定义。在上面查看细节。

然后,您可以在目录 ~/.jx/ 中创建文件 myvalues.yaml ,并写入一下内容:

jenkins:
  Agent:
    PodTemplates:
      Maven:
        Containers:
          Maven:
            Image: <YOUR_REGISTRY>/<YOUR_MAVEN_BUILDER_IMAGE>:<VERSION>
      Nodejs:
        Containers:
          Nodejs:
            Image: <YOUR_REGISTRY>/<YOUR_NODEJS_BUILDER_IMAGE>:<VERSION>
      Go:
        Containers:
          Go:
            Image: <YOUR_REGISTRY>/<YOUR_GO_BUILDER_IMAGE>:<VERSION>

您可以继续安装 Jenkins X,这些 Builder 将会自动地添加到平台。