首页 > 解决方案 > Jenkins 构建作业 A 使用其他构建作业 B docker 映像配置

问题描述

Jenkins 在 jenkins-ci 命名空间下的 AWS EKS 集群中运行。当多分支管道作业“Branch-A”开始构建时,它正在获取正确的配置(KubernetesPod.yaml)并成功运行,当作业“Branch-B”开始构建时,它正在使用作业 A 配置,如 docker image 和 buildurl .

Gitlab 配置:

分支-A——KubernetesPod.yaml

apiVersion: v1
kind: Pod
spec:
  serviceAccount: jenkins
  nodeSelector:
    env: jenkins-build
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: env
                operator: In
                values:
                - jenkins-build
  tolerations:
  - key: "highcpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"

  volumes:
  - name: dev
    hostPath:
      path: /dev

  imagePullSecrets:
  - name: gitlab

  containers:
    - name: build
      image: registry.gitlab.com/mycompany/sw-group/docker/ycp:docker-buildtest-1
      imagePullPolicy: IfNotPresent
      command:
        - cat
      securityContext:
        privileged: true
      volumeMounts:
      - mountPath: /dev
        name: dev
      tty: true
      resources:
        requests:
          memory: "4000Mi"
          cpu: "3500m"
        limits:
          memory: "4000Mi"
          cpu: "3500m"

分支-B——KubernetesPod.yaml

apiVersion: v1
kind: Pod
spec:
  serviceAccount: jenkins
  nodeSelector:
    env: jenkins-build
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: env
                operator: In
                values:
                - jenkins-build
  tolerations:
  - key: "highcpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"

  volumes:
  - name: dev
    hostPath:
      path: /dev

  imagePullSecrets:
  - name: gitlab

  containers:
    - name: build
      image: registry.gitlab.com/mycompany/sw-group/docker/ycp:docker-buildtest-2
      imagePullPolicy: IfNotPresent
      command:
        - cat
      securityContext:
        privileged: true
      volumeMounts:
      - mountPath: /dev
        name: dev
      tty: true
      resources:
        requests:
          memory: "4000Mi"
          cpu: "3500m"
        limits:
          memory: "4000Mi"
          cpu: "3500m"

Jenkins Branch-A 控制台输出:

Seen branch in repository origin/unknownMishariBranch
Seen branch in repository origin/vikg/base
Seen 471 remote branches
Obtained Jenkinsfile.kubernetes from 85b8ab296342b98be52cbef26acf20b15503c273
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] readTrusted
Obtained KubernetesPod.yaml from 85b8ab296342b98be52cbef26acf20b15503c273
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
Waiting for next available executor
Agent company-pod-8whw9-wxflb is provisioned from template Kubernetes Pod Template
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    buildUrl: "https://jenkins.mycompany.com/job/multibranch/job/branch-A/3/"
  labels:
    jenkins: "slave"
    jenkins/mycompany-pod: "true"
  name: "mycompany-pod-8whw9-wxflb"
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - preference:
          matchExpressions:
          - key: "env"
            operator: "In"
            values:
            - "jenkins-build"
        weight: 1
  containers:
  - command:
    - "cat"
    image: "registry.gitlab.com/mycompany/sw-group/docker/ycp:docker-buildtest-1"
    imagePullPolicy: "IfNotPresent"
    name: "build"
    resources:
      limits:
        memory: "4000Mi"
        cpu: "3500m"
      requests:
        memory: "4000Mi"
        cpu: "3500m"

Jenkins Branch-B 控制台输出:

Seen branch in repository origin/unknownMishariBranch
Seen branch in repository origin/viking/base
Seen 479 remote branches
Obtained Jenkinsfile.kubernetes from 38ace636171311ef35dc14245bf7a36f49f24e11
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] readTrusted
Obtained KubernetesPod.yaml from 38ace636171311ef35dc14245bf7a36f49f24e11
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
Waiting for next available executor
Agent mycompany-pod-qddx4-08xtm is provisioned from template Kubernetes Pod Template
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    buildUrl: "https://jenkins.mycompany.com/job/multibranch/job/branch-A/3/"
  labels:
    jenkins: "slave"
    jenkins/mycompany-pod: "true"
  name: "mycompany-pod-qddx4-08xtm"
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - preference:
          matchExpressions:
          - key: "env"
            operator: "In"
            values:
            - "jenkins-build"
        weight: 1
  containers:
  - command:
    - "cat"
    image: "registry.gitlab.com/mycompany/sw-group/docker/ycp:docker-buildtest-1"
    imagePullPolicy: "IfNotPresent"
    name: "build"
    resources:
      limits:
        memory: "4000Mi"
        cpu: "3500m"
      requests:
        memory: "4000Mi"
        cpu: "3500m"

标签: jenkinskubernetesdocker-registryamazon-eksmultibranch-pipeline

解决方案


每当触发构建时,它都会在 Jenkinsfile 中使用相同的标签名称。我在我的 jenkinsfile 脚本的一部分下面发布。以下解决方案解决了我的问题。

前:

pipeline {

  agent {
    kubernetes {
      label "sn-optimus"
      defaultContainer "jnlp"
      yamlFile "KubernetesPod.yaml"
    }
  }

后:

pipeline {

  agent {
    kubernetes {
      label "sn-optimus-${currentBuild.startTimeInMillis}"
      defaultContainer "jnlp"
      yamlFile "KubernetesPod.yaml"
    }
  }

推荐阅读