Невозможно развернуть образ Docker в Kubernetes с помощью Jenkins, если в файле deployment.yml нет изменений.

У меня есть репо, включающее Dockerfile и триггер github, который срабатывает каждый раз, когда фиксация помещается в ветку. Всякий раз, когда я фиксирую какое-либо изменение, он создает новый образ докера с тегами: имя ветки и хэш git (да, оба) и отправляет его в реестр. В моих рабочих нагрузках изображение описывается как image:branch_name. Если я вручную переустанавливаю, он загружает последний образ, и все работает нормально. Но проблема возникает, когда я делаю это с Дженкинсом. Потому что в файле deployment.yml изображение имеет имя_изображения:имя_ветви, которое все время статично.

Теперь я настроил задание jenkins для выполнения kubectl apply -f deployment.yml. Однако это не извлекает последнее изображение каждый раз, поскольку в файле yml нет изменений (имя изображения и ветки совпадают). Как я могу заставить Kubernetes каждый раз извлекать последнее изображение?

Одна идея, которую я имею, состоит в том, чтобы передать gitash в deployment.yml, чтобы в файл было добавлено изменение, запускающее развертывание. Как я могу этого добиться?

PS: я уже знаю kubectl rolling-restart и kubectl apply. Я хочу использовать вышеупомянутый метод. Там в любом случае?


person noobanyway    schedule 05.03.2021    source источник


Ответы (3)


Вы можете обновить образ развертывания, он автоматически запустит развертывание. Когда вы помечаете образ хэшем git, что хорошо, вы можете запустить что-то вроде этого в конце сборки:

kubectl set image deployment/my-deployment container_name=myimage:buildhash

person Thomas    schedule 05.03.2021
comment
Есть ли способ сделать это из файла deployment.yml, а в jenkins просто применить kubectl? Или передать githas в deployment.yml? - person noobanyway; 05.03.2021
comment
Вы можете вызвать kubectl set image прямо из Jenkinsfile — это тот момент, когда вы все равно знаете имя хэша изображения. - person Thomas; 06.03.2021

Вы можете установить imagePullPolcy на Always, и он всегда будет получать последнее изображение, или, если этого недостаточно, всегда есть Flux, который может просматривать ваш репозиторий и обновлять ваши манифесты в соответствии с указанными вами правилами (наибольшее число, правила семантического управления версиями и т. д.).

person Tyzbit    schedule 04.04.2021

Наконец-то я сделал это с патчем kubectl

kubectl patch deployment <deployment name> -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"build\":\"${BUILD_ID}\"}}}}}}"
person noobanyway    schedule 19.04.2021