gpt4 book ai didi

docker - 使用 kubernetes 和 jenkins 管理多 Pod 集成测试

转载 作者:行者123 更新时间:2023-12-02 09:08:32 24 4
gpt4 key购买 nike

我正在尝试使用 jenkins 和 jenkins kubernetes plugin 为我的 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'
}
}

我有两个主要问题:

  1. Pod 生命周期:一旦 podtemplate 之后的 block 被清除,pod 就会被终止。是否有一种可接受的方法可以让 Pod 保持事件状态,直到满足指定条件为止?

  2. 来自 docker 镜像的 ContainerTemplate:我正在使用 docker 镜像来配置每个 kubernetes pod 内的容器,但是即使安装的环境和依赖项对于 repo 。我如何真正让 docker 镜像中定义的服务在 jenkins 配置的 pod 中运行?

最佳答案

自从我问这个问题以来已经有一段时间了,与此同时,我学到了一些东西,让我能够完成我一直在要求的事情,尽管可能没有我希望的那么整齐。

多服务测试的解决方案最终只是使用具有 google cloud library 的 Pod 模板。 ,并为该工作线程分配一个服务帐户凭证和一个 key ,以便它可以在集群上执行 kubectl 命令。

worker 的 Dockerfile,将“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

然后在常规管道中:

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 工具将查找该环境变量。

关于docker - 使用 kubernetes 和 jenkins 管理多 Pod 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50495530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com