如何在 jenkins 管道上使用 terraform 连接到 minikube 集群?

时间:2021-01-06 19:49:23

标签: docker jenkins kubernetes terraform minikube

我需要一个 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.crtclient.keyca.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.crtclient.keyca.crt 有问题。但我没有对他们做什么。我只是将这些文件复制到我的工作目录中(其中存在 main.tf)。

从 jenkins 管道连接到 minikube 集群的正确方法是什么?

编辑

我知道将 client.crtclient.keyca.crt 等凭据放在代码存储库中是个坏主意,但我只是想测试一下。

0 个答案:

没有答案