如何使用Jenkinsfile中的kubectl sh在Kubernetes上进行部署

时间:2019-03-17 18:41:34

标签: kubernetes jenkins-pipeline kubectl minikube

我正在尝试创建在git中提交后触发的管道。我已经使用kvm2驱动程序安装了minikube。但是,我不确定是否已正确设置所有内容。 Jenkins先前已安装,并且无法在kubernetes上运行。

下面是我的Jenkins文件。

pipeline {

    environment {
        ....
    }

    agent any

    stages {

        stage ('Clone') {
            ....
        }

        stage('Build') {
            ....
        }

        stage(‘Containerize’) {
            .... build images with docker
        }

        stage('Deploy Image') {
            .... push images on Docker hub
        }

        stage('Deploy Application') {
            steps {
                // Create namespace if it doesn't exist
                sh("kubectl get ns development || kubectl create ns development")
               .... 
            }
        }
    }
}

我还将Kubernetes配置为Cloud。我已将kubernetes URL添加为./kube/config中的一个节目 kubernetes服务器证书作为/.minikube/ca.crt的内容

创建的凭据
sudo openssl pkcs12 -export -out kubernetes.pfx -inkey apiserver.key -in apiserver.crt -certfile ca.crt -passout pass:jenkins

我的问题是:

[Pipeline] { (Deploy Application)
[Pipeline] sh
+ kubectl get ns development
The connection to the server localhost:8080 was refused - did you specify the right host or port?

这与RBAC有关吗?我尝试使用kubectl create serviceaccount jenkins使用秘密令牌并复制令牌,但是当我测试连接时,它不起作用。

我不确定这是否是使用以下工具在Kubernetes上部署的正确方法 管道。 请提出是否有更好的方法来部署我的微服务。

1 个答案:

答案 0 :(得分:0)

  • 有很多部署到kubernetes的方法,使用更适合您的方法

  • 上述错误与群集的地址/ API端点有关,因此找不到您的群集,您需要在合适的位置提供kubeconfig或使用其他方式连接到群集

类似的东西:

kubectl --kubeconfig=/path/to/kubeconfig-file get ns development || kubectl --kubeconfig=/path/to/kubeconfig-file  create ns development")

与往常一样,请先尝试手动运行这些命令,并确保它们可以正常运行,然后再将它们放入自动化/管道中