当前位置: 首页 > 知识库问答 >
问题:

使用“标签”还是在jenkinsfile中为Kubernetes-Plugin定义一个pod模板?

宋正真
2023-03-14

我试图在为Jenkins使用kubernetes-plugin时使用label,但我有点困惑。在我的管道中,我试图用不同的标签(代理)在并行步骤中构建测试作业。

我已经在我的Jenkins配置中用pod模板和容器配置了插件,在这里我使用了与管道podtemplate中定义的设置相同的设置。

问题是,当我在阶段2中使用代理标签时,运行的是jnpl映像,而不是我在配置someimage:lates中指向的映像。

我做错了什么?以下是我的Jenkinsfile和Jenkins中kubernetes-plugin的配置:

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: k8s
    image: someimage:latest
    command:
    - sleep
    args:
    - infinity
    volumeMounts:
      - name: workspace-volume
        mountPath: /home/jenkins/agent
    workingDir: "/home/jenkins/agent"
  volumes:
      - name: "workspace-volume"
        persistentVolumeClaim:
          claimName: "jenkins-worker-pvc"
          readOnly: false
"""
pipeline {
    agent none
    stages {
        stage("Parallel") {
            parallel {
                stage("1.k8s") {
                    agent {
                        kubernetes {
                            yaml podTemplate
                            defaultContainer 'k8s'
                        }
                    }
                    steps {
                        sh """
                            mvn -version
                        """
                    }
                }
                stage("2. k8s") {
                    agent { label 'k8s' }
                    steps {
                        sh """
                            mvn -version
                        """
                    }
                }
                stage("win") {
                    agent { label 'windows' }
                    steps {
                        bat "dir"
                    }
                }
            }
        }
    }
}

共有1个答案

闻人景澄
2023-03-14

您没有为阶段指定具有标签K8sWindows的图像。

你可以在文档中读到:

该插件为每个启动的代理创建一个Kubernetes Pod,由Docker映像定义以运行,并在每次构建后停止它。

podTemplate(containers: [
    containerTemplate(name: 'maven', image: 'maven:3.3.9-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
    containerTemplate(name: 'golang', image: 'golang:1.8.0', ttyEnabled: true, command: 'cat')
  ]) {

    node(POD_LABEL) {
        stage('Get a Maven project') {
            git 'https://github.com/jenkinsci/kubernetes-plugin.git'
            container('maven') {
                stage('Build a Maven project') {
                    sh 'mvn -B clean install'
                }
            }
        }

        stage('Get a Golang project') {
            git url: 'https://github.com/hashicorp/terraform.git'
            container('golang') {
                stage('Build a Go project') {
                    sh """
                    mkdir -p /go/src/github.com/hashicorp
                    ln -s `pwd` /go/src/github.com/hashicorp/terraform
                    cd /go/src/github.com/hashicorp/terraform && make core-dev
                    """
                }
            }
        }

    }
}
 类似资料:
  • 我正在使用Prometheus来监控我的库伯内特斯集群。我在一个单独的命名空间中设置了Prometheus。我有多个命名空间和多个pod正在运行。每个pod容器在此终端公开一个自定义指标,。我正在获取Pods CPU、内存指标等,但是如何配置Prometheus从每个可用pod中的中提取数据?我使用本教程设置了Prometheus、Link

  • 我有以下由Dockerfile文件创建的图像: 我有以下YAML文件: 当我创建部署时,我在窗格中获得了以下信息: 并且错误: 真的有必要在docker中为此注册吗?我只想在本地进行测试,并将我的代码/存储库传递给朋友以进行测试 谢谢

  • Kubernetes中需要考虑三个级别的度量集合—节点、Pod和在Pod中运行的应用程序。 对于节点和应用程序指标,我有非常有效的解决方案,但我仍停留在pod指标上。 我尝试过cAdvisor和Kube状态指标,但它们都没有给我想要的东西。Kube状态指标仅提供已知的信息,例如pod CPU限制和请求。cAdvisor不会将pod标签插入容器名称,因此我无法知道哪个pod行为不端。 给定一个pod

  • 针对k8s部署微服务,我们是一个pod对应部署一个应用,还是多个pod对应一个应用呢?还是一个pod可以对应多个应用?

  • 本文向大家介绍ThinkPHP模板自定义标签使用方法,包括了ThinkPHP模板自定义标签使用方法的使用技巧和注意事项,需要的朋友参考一下 使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms、phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据。以调用文章列表为例: dedecms可以写成: phpcms可以写成: ThinkPHP的自定义标签同样能够实

  • 问题内容: 目标: 使用jQuery,我试图替换所有出现的情况: 与: 我的解决方案: 我了解到以下内容: 我的解决方案的问题: 但是问题在于它用 第一个 “ code”标签之间的内容替换了(第二,第三,第四等)“ code”标签之间的所有内容。 例如 变成 我认为我需要使用“ this”和某种功能,但恐怕我还在学习,并且不太了解如何将解决方案组合在一起。 问题答案: 您可以将一个函数传递给 [d