Anatoliy
Но... конфиг для кубера там тоже будет?
Shamil
Пока это изучи, многое прояснится в ходе.
Shamil
У тебя примерно такой пайплайн получится: 1. сборка go 2. публикация артефактов 3. запуск контейнера дженкинсом, с этими артефактами, тестирование 4. пуш Dockerfile в git, 5. сборка Docker образа. Дальше уже другой пайплайн стартует.
Shamil
Ну можешь в один объеденить, но лучше чтобы через контроль версий проходило.
Shamil
https://www.pluralsight.com/courses/docker-ansible-continuous-delivery может помочь
Serega
а зачем "5. пуш Dockerfile в git" ?
Shamil
Shamil
Ну то есть сперва dockerfile пушится в гит, и только увидев это, дженкинс дальше идет собирать сам образ.
Serega
ну как бы докерфайл один раз написали и он не меняется. А меняется код. 12 факторов же
Shamil
Если версионирование контейнеров не идет, или конфиги никогда не меняются, то можно и так. В зависимости от ситуации, это уже кто как.
Serega
стоп, у нас уже есть репозиторий, в нем код, Dockerfile, (Jenkinsfile|.travis.yml|Makefile) и т.д. при пуше каких-либо изменений в репу, стартует CI\CD. Запускаются сборка, тесты, упаковка артифакта в докер имедж, тесты, пуш в реджистри, (и опционально деплой в различные среды). Версия докеримеджа может быть привязана к git tag, branch name, commit hash и т.д. Мне лично git tag нравится.
Shamil
Вообще образы хорошо бы версионировать — в любой момент потом можно будет вернуться. Просто дженкинс может вешать тег с версией, после интеграционного тестирования и перевешивать тег latest.
Shamil
Тогда на образ потом тоже тег ляжет и кубик сам тебе latest поднимет, прямо не отходя от кассы.
Serega
это все понятно. Не понятно для чего пушить что-либо в репозиторий в процессе сборки.
Shamil
Ну да, я не так выразился, надо было написать: "вешает метку"
Serega
имелся в виду docker tag ?
Shamil
Просто чувак как то задействовать дженкинс в деплойменте на кубик, а он там по идее не нужен.
Anatoliy
Хорошо, а как тогда можно убрать последний шаг? ведь куберу надо сообщить что версия появилась новая?
Shamil
Anatoliy
я думал что дженкинс должен просто выполнить что-то типа kubectl apply -f deployment.yaml где прописан будет нужный образ из реджистри. и всё. дальше уже сам кубер все доделает
Shamil
И staging
Anatoliy
ну пусть там будет latest, но kubectl apply все равно надо сделать?
Anton
latest тэг при деплое путь к беде
Shamil
Там rc сам должен увидеть, что тег поменялся и все сделать сам.
Anton
как то лучше фиксировать, по git commit hash \ git tag
Shamil
Shamil
latest на проде конечно не надо...
Anatoliy
ну понятно что там не именно latest, но я не понимаюб как сказать куберу что пора проверять что там что-то обновилось в образе
Shamil
@Visteras ты просто можешь запускать дженкинсовские джобы в кубике, если хочешь сборку и все такое делать не на самом дженкинсе, тебя, наверное, это сбило с толку.
Shamil
Shamil
Anton
Anton
я вообще не уверен что если не форсить always pull политику для имейджей применение latest поверх latest хоть что то стригерит
Anton
в общем поэтому я и говорю что latest или prod или еще что то там фиксированное в качестве тэга для docker image плохо.
нужно отличать один деплой от другого. если по git tag - то пускай будет prod-<date> какой нить, чтобы все явно было
Anton
хотя бы по такому тегу можно понять однозначно какой именно код у тебя в имейдже
Shamil
Тебе что тегов жалко, вешай хоть десять разных
Shamil
Ты не меняешь теги в данном случае, а снимешь тег, с одного образа и вешаешь его на другой. RC это точно увидит.
Салтыдык
кубер не сможет понять, что тэг обновился. Где-то в доке это говорится (не использовать latest).
Мой процесс: у меня есть установка с нуля (деплой манифестов) и на каждый CI\CD я просто делаю kubectl set image. Не понимаю что вы тут за велосипеды изобретаете.
Тэги на образы пока делаю коротышами от SHA-коммита.
Салтыдык
Anatoliy
Салтыдык
я именно про деплоймент и говорю, не сможет кубер понять обновилось на той стороне что-то или нет
Anatoliy
Anatoliy
т.е. что-то вроде kubectl apply -f deployment.yaml
Алексей
именно так
Салтыдык
если тэг имиджа не меняется, то обновлением деплоймента ничего не произойдёт
Anatoliy
вот, потому тег меняется. но что надо сделать что бы после сборки, тестов, создания образа и пуша его в реджистри дженкинс мог выполнить kubectl ?
Anatoliy
Как добавить kubectl в контейнер агента дженкинса в котором все собирается?
Алексей
измени имидж контейнера с агентом дженкинса, установи туда kubectl
Shamil
Но это не то, что тебе нужно.
Anatoliy
Shamil
Ты просто стартуешь в поде jenkins-слейв, а это не то...
Салтыдык
значит надо обновить деплоймент, так?
варианты:
1) политика пулла Always, использовать статический тэг (latest), удалением поды вызывается репулл.
2) использовать тэги на каждый деплой. kubectl set image
Shamil
Зачем тебе его запускать, я никак не могу понять?
Anatoliy
Anatoliy
Салтыдык
Shamil
Anatoliy
https://pastebin.com/c9GHGTyF
Сейчас pipeline выглядит так
Anatoliy
Не самый лучший вариант но все понятно
Shamil
Салтыдык
go build -i -o auth && mv auth /go/bin/auth
легко превращается в go install
Anatoliy
Салтыдык
не разбираюсь в дженкинс, по этому не могу уловить суть проблемы
Shamil
Салтыдык
в gitlab-ci можно запихнуть сертификат и конфиг в переменные окружения, не знаю можно ли так в дженкинс.
Либо сделать готовый имидж с конфигом и авторизацией
Anatoliy
Хм.. вообще - умеет. В общем буду думать.
Конфигов же может быть несколько? Я про то что я могу сгенерить новый и использовать его? И потом если что просто убить?
Shamil
Shamil
https://plugins.jenkins.io/kubernetes а ты, видимо, вот это смотришь, вот это не то (-:
Anatoliy
Да, действительно возможно именно так.
Вечером обязательно проверю
Anatoliy
так что опять вернулись к чему было - не понятно как это сделать(