# Jenkins -> k8s

[Видео по настройке взаимодействия](https://rutube.ru/video/fe8a5847f8201929ee2efcb828d5d220/)

[Описание плагина Kubernetes](https://plugins.jenkins.io/kubernetes/)

[Описание плагина Credentials](https://plugins.jenkins.io/credentials-binding/)

[Детальное описание Pod](https://devopscube.com/jenkins-build-agents-kubernetes/)

[Шпаргалка по k8s](https://wikival.bmstu.ru/doku.php?id=%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_kubernetes#helm)

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

[![jenkins_k8s_1.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-02/scaled-1680-/jenkins-k8s-1.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-02/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](http://bobrobotirk.ru/uploads/images/gallery/2025-02/scaled-1680-/jenkins-k8s-2.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-02/jenkins-k8s-2.JPG)

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

[![jenkins_k8s_3.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-02/scaled-1680-/jenkins-k8s-3.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-02/jenkins-k8s-3.JPG)

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

 [![jenkins_k8s_4.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-02/scaled-1680-/jenkins-k8s-4.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-02/jenkins-k8s-4.JPG)

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

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

```
/etc/kubernetes/admin.conf
```

Сохраняем его в Credentials Jenkins и тип - файл. В данном случае ID textauth. [![jenkins_keys_6.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-02/scaled-1680-/jenkins-keys-6.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-02/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"
        }
    }
  }
}
```