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

使用 kubernetes 和 jenkins 管理多 pod 集成测试

袁恩
2023-03-14

我试图使用jenkins和jenkins kubernetes插件为我的kubernetes集群建立一个测试框架。

我可以让jenkins提供pod并运行基本的单元测试,但不清楚的是我如何运行涉及多个pod之间协调的测试。

从本质上讲,我想做这样的事情:

podTemplate(label: 'pod 1', containers: [ containerTemplate(...)]) {
    node('pod1') {
        container('container1') {
            // start service 1
        }
    }
}
podTemplate(label: 'pod 2', containers[ containerTemplate(...)]) {
    node('pod2') {
        container('container2') {
            // start service 2
        }
}
stage ('Run test') {
    node {
        sh 'run something that causes service 1 to query service 2'
    }
}

我有两个主要问题:

> < li>

Pod生命周期:一旦podtemplate之后的块被清除,Pod就会终止。有没有一种公认的方法可以让豆荚一直存活到特定的条件被满足?

来自 docker 映像的 ContainerTemplate:我正在使用 docker 映像来预配每个 kubernetes pod 内的容器,但是应该在这些映像中的文件在“容器”块内似乎不可见/可访问,即使安装的环境和依赖项对于存储库是正确的。如何实际获取 docker 映像中定义的服务,以便在 jenkins 预配的 pod 中运行?

共有1个答案

缪嘉志
2023-03-14

自从我提出这个问题已经有一段时间了,在此期间,我学到了一些东西,让我完成了我一直在问的事情,尽管可能不如我希望的那样整齐。

多服务测试的解决方案最终只是使用一个包含google cloud library的pod模板,并为该工作人员分配一个服务帐户凭证和一个密钥,这样它就可以在集群上< code>kubectl命令。

Dockerfile for work,将“X”替换为所需版本:

FROM google/cloud-sdk:alpine

// Install some utility functions.
RUN apk add --no-cache \
  git \
  curl \
  bash \
  openssl

// Used to install a custom version of kubectl
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/vX.XX.X/bin/linux/amd64/kubectl &&\
  chmod +x ./kubectl &&\
  mv ./kubectl /usr/local/bin/kubectl

// Helm to manage deployments.
RUN curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh &&\
  chmod 700 get_helm.sh && ./get_helm.sh --version vX.XX.X

然后在groovy管道中:

pipeline {
  agent {
    kubernetes {
      label 'kubectl_helm'
      defaultContainer 'jnlp'
      serviceAccount 'helm'
      yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: gcloud
  image: your-docker-repo-here
  command:
  - cat
  tty: true
"""
    }
  }
  environment {
      GOOGLE_APPLICATION_CREDENTIALS = credentials('google-creds')
  }
  stages {
    stage('Do something') {
      steps {
        container('gcloud') {
          sh 'kubectl apply -f somefile.yaml'
          sh 'helm install something somerepo/somechart'
        }
      }
    }
 }

现在,我可以访问 helm 和 kubectl 命令,我可以随意上下移动 Pod 或服务。它仍然没有解决能够使用它们的内部“上下文”来访问文件的问题,但至少它给了我一种运行集成测试的方法。

注意:为了正常工作,您需要一个用于服务号名称的服务号,以及存储在jenkins凭据存储中的凭据。为了使helm命令正常工作,您需要确保Tiller安装在您的kubernetes集群上。此外,不要从GOOGLE_APPLICATION_CREDENTIALS更改env键的名称,因为gsutils工具将查找该环境变量。

 类似资料:
  • 问题内容: 我使用kubeadm Kubernetes 1.9 RBAC集群进行了自举,并开始在基于jenkins / jenkins:lts的POD Jenkins内部。我想尝试https://github.com/jenkinsci/kubernetes- plugin 。我已经基于https://gist.github.com/lachie83/17c1fff4eb58cf75c5fb11a

  • 最近我一直试图在詹金斯内部建立一个管道。目标是创建一个pod并执行kubernetes部署。 但是当我运行管道作业时,它会一个接一个地创建pod,它永远不会完成作业- 设置kubernetes集群-成功 安装jenkins-成功 连接jenkins到kubernetes集群-成功 这是管道脚本- 不-Pods创建成功,kubernetes部署也成功,但jenins管道从未停止。 我的jenkins

  • 我正在运行 jenkins 作业来构建我们的 maven 应用程序并部署到 kubernetes 集群中。为此,我创建了 Pod 容器模板来部署我的模块。 当我运行构建我的jenkins作业时,我的构建失败,出现以下错误, 与此同时,当我检查kubernetes主服务器时,我可以看到pods正在尝试调度,并且在几秒钟后返回到终止状态。 管道脚本 请在下面找到主机配置 kubectl错误日志 你能请

  • 问题内容: 我正在使用dotnet测试对dotnet核心库进行单元测试。我像这样在我的詹金斯奴隶上进行测试。 测试报告如下所示。 我在詹金斯(Jenkins)工作DSL中使用一个块来尝试阅读报告。 詹金斯似乎看到了这份报告。 记录测试结果 但这不是解析结果并将其合并到报告中。我在Jenkins构建仪表板上看不到测试报告。 有任何想法吗? 问题答案: 您可以使用以下管道代码来运行和发布dotnet核

  • 我正在尝试从Jenkins管道使用helm部署容器。我已经为jenkins安装了库伯内特斯插件,并在本地运行kubernetes URL和凭据中的配置文件中提供了它。当我执行时,它显示。 但是当我从管道运行helm install命令时,它会出错。 注意:我可以使用 CLI 以及通过使用和传递信誉文件变量名称(在 jenkins 凭据中创建)从 Jenkins 管道执行所有操作。我只想这样做,而不

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/jenkins_ci.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e Jenkins CI Jenkins continuous integration server on S