Skip to main content

Jenkins -> k8s

Видео по настройке взаимодействия

  • Есть Jenkins вне кластера. Дополнительно установленить плагин Kubernetes. Остальные нужные плагины подтянутся сами (Kubernetes client API, ...).

jenkins_k8s_1.JPG

  • Есть кластер k8s с доступным для Jenkins внешним адресом. Внутри кластера есть одна нода с доступом в Интернет. Доступ с ноды для приложенного pipeline критичен) из-за скачивания исполняемых файлов, если эти файлы есть внутри кластера - все еще лучше
  • На кластере создаем namespace, пользователя jenkins, токен 
    kubectl create namespace jenkins
    kubectl create sa jenkins -n jenkins
    kubectl create token jenkins -n jenkins --duration=8760h
    #здесь отобразится токен, его нужно сохранить, затем добавим в настройки Cloud
    kubectl create rolebinding jenkins-admin-binding --clusterrole=admin --serviceaccount=jenkins:jenkins --namespace=jenkins
  • //еще не полностью понял// Под термином Cloud в Jenkins понимается поддерживаемые типы виртуализации/контейнеризации для создания динамических агентов. Т е авторизация и т д, настраиваемая в Clouds, используется только для создания динамического агента в соответствующем типе виртуализации и затем удаления его. Все. Агент создается пустой, все остальное нужно доделывать. При установке соответствующих плагинов (Docker, Kubernetes, Virtualbox) в списке появляются соотвозможныетствующие типы облаков. 
  • Для использования в динамическом агенте настроим авторизацию. Настроить Jenkins - Credentials - System - Global credentials 
  • Выбрать тип Secret text, в поле Secret вставляем сохраненный токен, ID и Description обычно одинаковый.

 jenkins_k8s_2.JPG

  • Добавляем Cloud. Name это имя, любое. Kubernetes URL - адрес кластера, по которому Jenkins может подключиться. Credentials - созданный на предыдущем шаге.

jenkins_k8s_3.JPG

  • Справа есть кнопка Test connection Обязательно проверить соединение.
  • Добавить стоит только адрес Jenkins сервера и Web Socket. Все остальное по умолчанию.

 jenkins_k8s_4.JPG

  • Настройка основы для динамического Jenkins клиента завершена.

Для работы с kubernetes нужен файл авторизации. Формат файла и настройки админа (для примера) можно посмотреть на кластере Kubernetes в 

/etc/kubernetes/admin.conf

Сохраняем его в Credentials Jenkins и тип - файл. В данном случае ID textauth. jenkins_keys_6.JPG

Важно, что рабочая директория Jenkins может (и скорее всего будет) отличаться от homedir пользователя

Pipeline:

pipeline {
  agent {
          kubernetes (kubernetesAgent(name: 'mini'))
  }
  
  stages {
    stage('Integrate Remote k8s with Jenkins ') {
      steps {
            sh "mkdir ~/.kube"
            withCredentials([file(credentialsId: 'textauth', variable: 'FILE')]) {
                sh 'cp $FILE ~/.kube/config'
                }
            sh "curl -LO 'https://dl.k8s.io/release/v1.32.2/bin/linux/amd64/kubectl'"
            sh "chmod +x kubectl"
            sh "./kubectl get nodes"
        }
    }
  }
}