创建自定义 Builder

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

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

从零创建一个自定义 Builder

Builder 镜像

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

  1. FROM jenkinsxio/builder-base:latest
  2. # Install your tools and libraries
  3. RUN yum install -y gcc openssl-devel
  4. CMD ["gcc"]

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

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

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

  1. jx import --url <REPOSITORY_URL>

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

安装 Builder

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

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

  1. jenkins:
  2. Agent:
  3. PodTemplates:
  4. MyBuilder:
  5. Name: mybuilder
  6. Label: jenkins-mybuilder
  7. volumes:
  8. - type: Secret
  9. secretName: jenkins-docker-cfg
  10. mountPath: /home/jenkins/.docker
  11. EnvVars:
  12. JENKINS_URL: http://jenkins:8080
  13. GIT_COMMITTER_EMAIL: jenkins-x@googlegroups.com
  14. GIT_AUTHOR_EMAIL: jenkins-x@googlegroups.com
  15. GIT_AUTHOR_NAME: jenkins-x-bot
  16. GIT_COMMITTER_NAME: jenkins-x-bot
  17. XDG_CONFIG_HOME: /home/jenkins
  18. DOCKER_CONFIG: /home/jenkins/.docker/
  19. ServiceAccount: jenkins
  20. Containers:
  21. Jnlp:
  22. Image: jenkinsci/jnlp-slave:3.14-1
  23. RequestCpu: "100m"
  24. RequestMemory: "128Mi"
  25. Args: '${computer.jnlpmac} ${computer.name}'
  26. Dlang:
  27. Image: <YOUR_BUILDER_IMAGE>
  28. Privileged: true
  29. RequestCpu: "400m"
  30. RequestMemory: "512Mi"
  31. LimitCpu: "1"
  32. LimitMemory: "1024Mi"
  33. Command: "/bin/sh -c"
  34. Args: "cat"
  35. Tty: true

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

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

使用 Builder

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

  1. pipeline {
  2. agent {
  3. label "jenkins-mybuilder"
  4. }
  5. stages {
  6. stage('Build') {
  7. when {
  8. branch 'master'
  9. }
  10. steps {
  11. container('mybuilder') {
  12. // your steps
  13. }
  14. }
  15. }
  16. }
  17. post {
  18. always {
  19. cleanWs()
  20. }
  21. }
  22. }

覆盖已有的 Builder

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

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

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

  1. jenkins:
  2. Agent:
  3. PodTemplates:
  4. Maven:
  5. Containers:
  6. Maven:
  7. Image: <YOUR_REGISTRY>/<YOUR_MAVEN_BUILDER_IMAGE>:<VERSION>
  8. Nodejs:
  9. Containers:
  10. Nodejs:
  11. Image: <YOUR_REGISTRY>/<YOUR_NODEJS_BUILDER_IMAGE>:<VERSION>
  12. Go:
  13. Containers:
  14. Go:
  15. Image: <YOUR_REGISTRY>/<YOUR_GO_BUILDER_IMAGE>:<VERSION>

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

参照