我需要一个 kubernetes 集群来进行端到端的测试。所以我在安装 jenkins 的同一台机器上创建了一个 minikube 集群。 jenkins 安装是在 docker 中以 docker 的形式安装在 official documentation 上。
我想使用 terraform 在 minikube 上配置一个 kubernetes 集群。这是我的 main.tf:
provider "kubernetes" {
host = "https://172.17.0.2:8443"
client_certificate = file("./client.crt")
client_key = file("./client.key")
cluster_ca_certificate = file("./ca.crt")
load_config_file = false
}
# Provisioning other resources here ...
client.crt
、client.key
和 ca.crt
是 minikube 生成的文件。
当我在我的机器上手动运行 terraform 时,一切都按预期工作。但是当我在管道中使用 jenkins terraform plugin 运行 terraform 时,它无法连接到 minikube。
这是我的 Jenkinsfile:
pipeline {
agent any
tools { terraform 'terraform' }
stages {
stage('Terraform') {
steps {
sh 'terraform init'
sh 'terraform apply --auto-approve'
}
}
stage('Selenium') {
agent {
docker { image 'joyzoursky/python-chromedriver:3.7-alpine3.8-selenium' }
}
steps {
sh 'python selenium_test.py'
}
}
}
}
它无法执行 terraform apply
,因为它无法连接到 minikube。这是我的管道输出控制台的一部分:
+ terraform apply --auto-approve
[0m[1mkubernetes_deployment.helloworld: Refreshing state... [id=default/helloworld][0m
[31m
[1m[31mError: [0m[0m[1mGet "https://172.17.0.2:8443/apis/apps/v1/namespaces/default/deployments/helloworld": dial tcp 172.17.0.2:8443: i/o timeout[0m
[0m[0m[0m
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Selenium)
Stage "Selenium" skipped due to earlier failure(s)
[Pipeline] }
这是我的 start_jenkins.sh:
docker run --name jenkins-docker --rm --detach \
--privileged --network jenkins --network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 docker:dind
docker build -t myjenkins-blueocean:1.1 .
docker run --name jenkins-blueocean --rm --detach \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 --publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:1.1
我猜 client.crt
、client.key
和 ca.crt
有问题。但我没有对他们做什么。我只是将这些文件复制到我的工作目录中(其中存在 main.tf
)。
从 jenkins 管道连接到 minikube 集群的正确方法是什么?
编辑
我知道将 client.crt
、client.key
和 ca.crt
等凭据放在代码存储库中是个坏主意,但我只是想测试一下。