Храните учетные данные кластера Kubernetes в Jenkins и используйте в декларативном конвейере - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь развернуть кластер k8s, используя Helm 3 и jenkins. Jenkins и k8s работают на разных серверах. Я объединил файлы kubeconfig и у меня была вся информация в одном каталоге config ./kube. Я хотел бы развернуть свое приложение в соответствующей среде и пространстве имен в соответствии со значением GIT_BRANCH. У меня есть два вопроса для приведенного ниже сценария.

1. Как лучше всего хранить учетные данные кластера k8s и использовать их в конвейере. Я видел некоторые плагины, такие как Kubernetes CLI, но я не могу быть уверен, будет ли это соответствовать моим требованиям. Если я использую этот плагин, должен ли я сохранять файл k8s на машине Jenkins вручную или этот плагин уже обрабатывает это с помощью загрузки файла конфигурации.

2. Следует ли что-либо изменить в приведенном ниже сценарии, чтобы следовать рекомендациям?

         stage('Deploy to dev'){
         script{
             steps{
                 if(env.GIT_BRANCH.contains("dev")){

                        def namespace="dev"
                        def ENV="development"

                        withCredentials([file(credentialsId: ...)]) {
                        // change context with related namespace
                        sh "kubectl config set-context $(kubectl config current-context) --namespace=${namespace}"

                        //Deploy with Helm
                        echo "Deploying"
                        sh "helm upgrade --install road-dashboard -f values.${ENV}.yaml --set tag=$TAG --namespace ${namespace}"    
                 }
             }
         }
     }

    stage('Deploy to Test'){
        script{
            steps{
                 if(env.GIT_BRANCH.contains("test")){

                        def namespace="test"
                        def ENV="test"

                        withCredentials([file(credentialsId: ...)]) {
                        // change context with related namespace
                        sh "kubectl config set-context $(kubectl config current-context) --namespace=${namespace}"


                        //Deploy with Helm
                        echo "Deploying"
                        sh "helm upgrade --install road-dashboard -f values.${ENV}.yaml --set tag=$TAG --namespace ${namespace}"
                    }
                }
            }
        }
    }

    stage ('Deploy to Production'){

        when {
            anyOf{
                environment name: 'DEPLOY_TO_PROD' , value: 'true'
            }
        }

        steps{
            script{
                DEPLOY_PROD = false
                def namespace = "production"

                withCredentials([file(credentialsId: 'kube-config', variable: 'kubecfg')]){
                    //Change context with related namespace
                    sh "kubectl config set-context $(kubectl config current-context) --namespace=${namespace}"

                    //Deploy with Helm
                    echo "Deploying to production"
                    sh "helm upgrade --install road-dashboard -f values.${ENV}.yaml --set tag=$TAG --namespace ${namespace}"
                }
            }
        }
    }

1 Ответ

0 голосов
/ 18 января 2020

Я никогда не пробовал этого, но теоретически переменная учетных данных доступна как переменная окружения. Попробуйте использовать KUBECONFIG в качестве имени переменной

withCredentials([file(credentialsId: 'secret', variable: 'KUBECONFIG')]) {

  // change context with related namespace
  sh "kubectl config set-context $(kubectl config current-context) --namespace=${namespace}"

  //Deploy with Helm
  echo "Deploying"
  sh "helm upgrade --install road-dashboard -f values.${ENV}.yaml --set tag=$TAG --namespace ${namespace}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...