Я пытаюсь развернуть кластер 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}"
}
}
}
}