【问题标题】:Jenkins - Kubernetes Plugin inm OpenShift. Only jnlp containers workJenkins -OpenShift 中的 Kubernetes 插件。只有 jnlp 容器工作
【发布时间】:2019-03-08 08:27:31
【问题描述】:

我目前正在使用以下配置在 OpenShift 中构建管道

openshift:v3.6.173.0.140
Jenkins:2.017(使用来自 https://github.com/openshift/jenkins 的 redhat 图像)
Jenkins-Kubernetes 插件 1.12.2

作为 Jenkins 代理,我正在使用由 openshift jenkins 模板提供的 nodejs 代理以及在它们之上构建的图像(例如,我还使用 typescript 编译器安装的一个图像)

现在我想做的是用多个容器运行 pod(不仅仅是 jnlp 一个,而是标准节点,go 等容器)现在根据文档,这应该不是问题(https://github.com/jenkinsci/kubernetes-plugin),我应该只需将容器添加到我的 podTemplate 就像

podTemplate(label: mylabel, cloud: 'openshift', 
  containers: [
    containerTemplate(
      name: "jnlp",
      resourceRequestMemory: "512Mi",
      resourceLimitMemory: "2048Mi",
      workingDir: "/home/default",
      tty: "false",
      imagePullPolicy: "Always",
      image: 'private-registry:5000/namespace/nodejs-tsc-jnlp-image:latest',
      args: '${computer.jnlpmac} ${computer.name}',
    ),
    containerTemplate(
      name: 'node',
      resourceRequestMemory: '512Mi',
      resourceLimitMemory: '2048Mi',
      workingDir: '/home/default',
      tty: 'true',
      imagePullPolicy: 'Always',
      image: 'node:alpine',
      command: 'cat'
    )
  ]
)

现在的问题是,这不起作用。为节点容器拉取图像工作正常,如果我使用 echo test 而不是 cat 作为命令测试将显示在容器日志中,但容器将作为完成传递,它将不执行管道中描述的任何内容。同样,这完全按照文档中的说明编写

node(mylabel){
stage('TEST NODE'){
  container("node"){
    sh("echo test node")
  }
  container("jnlp"){
    sh("echo test jnlp")
  }
}

知道我做错了什么吗?

【问题讨论】:

    标签: jenkins kubernetes jenkins-pipeline openshift


    【解决方案1】:

    我会尝试使用命令:/bin/sh -ccat 作为参数。

    【讨论】:

    • 不幸的是同样的结果。
    【解决方案2】:

    好的,

    似乎我犯的唯一错误是以下错误。在容器内使用一个阶段,它可以工作。在 Openshift 中,最好使用官方的 jenkins 从属镜像,因为社区镜像在我的 git checkout 中遇到了问题。我还进行了一些更改以使用 yamlfile 来配置我的构建 pod。所以我的设置现在看起来像这样(仅以基本阶段为例)

    jenkins/BuildPod.yaml

    kind: Pod
    apiVersion: v1
    metadata:
      labels:
        app: my-build-pod
    spec:
      containers:
      - name: jnlp
        image: openshift/jenkins-slave-base-centos7:latest
      - name: nodejs
        image: node:8-alpine
        command:
        - cat
    

    Jenkinsfile

    node {
      checkout scm
      def label = "mypod-${UUID.randomUUID().toString()}"
    
      podTemplate(
        label: label
        cloud: 'openshift'
        yaml: readFile(file: "jenkins/BuildPod.yaml")
      ){
        node(label){
          container('nodejs'){
            stage('Check versions'){
              sh 'node -v'
              sh 'npm -v'
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多