Привет.
Последнее время волей судьбы погрузился в тесную работу с Jenkins на одном проекте. Опыта кастомизации данного тула как и более опытных коллег не имею. Приходится разбираться не лету и есть много пробелов (возможно из-за специфики реализации).
Сделал эту тему, буду сюда вопросы писать. Прошу не пинать за нубские.
В двух словах о реализации. Использую связку git + ant scripts from FinancialForce + свои python скрипты работающие напрямую с Tooling API + вывод общей информации в Slack.
Основной вопрос - как можно связать Jenkins, Ant и скрипты на python? Пока по большей части все работает костыльно - либо вообще не связано (по очереди) либо через файловую систему.
Вот к примеру после того как выполнится ant deploy я запускаю ряд своих скриптов и хочу в них получить вывод из ant и статус выполнения. Пытался найти какие-то внутренние механизмы Jenkins вроде глобальных переменных, но что-то не получилось.
Как вы работаете со скриптами в Jenkins? Можете подкинуть информацию для размышления?
Привет. Последнее время волей судьбы погрузился в тесную работу с Jenkins на одном проекте. Опыта кастомизации данного тула как и более опытных коллег не имею. Приходится разбираться не лету и есть много пробелов (возможно из-за специфики реализации). Сделал эту тему, буду сюда вопросы писать. Прошу не пинать за нубские. В двух словах о реализации. Использую связку git + ant scripts from FinancialForce + свои python скрипты работающие напрямую с Tooling API + вывод общей информации в Slack. Основной вопрос - как можно связать Jenkins, Ant и скрипты на python? Пока по большей части все работает костыльно - либо вообще не связано (по очереди) либо через файловую систему. Вот к примеру после того как выполнится ant deploy я запускаю ряд своих скриптов и хочу в них получить вывод из ant и статус выполнения. Пытался найти какие-то внутренние механизмы Jenkins вроде глобальных переменных, но что-то не получилось. Как вы работаете со скриптами в Jenkins? Можете подкинуть информацию для размышления?
Я был на их презентации они говорили что можно писать плагины для женкинск вроде на груви.
Я был на их презентации они говорили что можно писать плагины для женкинск вроде на груви.
Зачем тебе кучу билд скриптов на разных языках?
Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.
[quote="Dmitry Shnyrev"]Основной вопрос - как можно связать Jenkins, Ant и скрипты на python?[/quote] Зачем тебе кучу билд скриптов на разных языках? Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.
Использую Gradle скрипт, который находит измененные файлы, деплоит их и шлет нотификации.
[quote="Dmitry Shnyrev"]Как вы работаете со скриптами в Jenkins? Можете подкинуть информацию для размышления? [/quote] Использую Gradle скрипт, который находит измененные файлы, деплоит их и шлет нотификации.
Ну минимально мне нужно 2 типа билд скриптов (пока нужно):
1. ant скрипты от FinancialForce
2. мои скрипты на Python
А пока нужно так, потому что 1. не сильно хочется переписывать на python, хотя по ходу все к этому идет.
На счет Gradle + Groovy, хотел бы услышать о каких-то реальных преимуществах использования. Помню Gres ты упоминал про эту связку в отношении SF и я как-то пробовал (но без реальной задачи), и не сильно впечатлился.
Просто я крайне удивлен, что такой мощный и старый тул как Jenkins не имеет инструмента для передачи контекста сквозь скрипты.
[quote="Gres"]Зачем тебе кучу билд скриптов на разных языках? Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.[/quote] Ну минимально мне нужно 2 типа билд скриптов (пока нужно): 1. ant скрипты от FinancialForce 2. мои скрипты на Python А пока нужно так, потому что 1. не сильно хочется переписывать на python, хотя по ходу все к этому идет. На счет Gradle + Groovy, хотел бы услышать о каких-то реальных преимуществах использования. Помню Gres ты упоминал про эту связку в отношении SF и я как-то пробовал (но без реальной задачи), и не сильно впечатлился. Просто я крайне удивлен, что такой мощный и старый тул как Jenkins не имеет инструмента для передачи контекста сквозь скрипты.
А причем тут контекст? Он должен просто уметь выполнять скрипты и все.
[quote="Dmitry Shnyrev"]Просто я крайне удивлен, что такой мощный и старый тул как Jenkins не имеет инструмента для передачи контекста сквозь скрипты. [/quote] А причем тут контекст? Он должен просто уметь выполнять скрипты и все.
Лучше, чем xml.
[quote="Dmitry Shnyrev"]На счет Gradle + Groovy, хотел бы услышать о каких-то реальных преимуществах использования. [/quote] Лучше, чем xml.
Согласен с доводами.
Gradle лучше чем ant.
Теперь осталось выяснить какая связка лучше:
Jenkins + Gradle(Groove)
Jenkins + Python shell scripts
На счет контекста - понял свою ошибку - я неправильно понял архитектуру Jenkins Job. В принципе логично что каждый step должен быть атомарной единицей и не зависеть от предыдущего шага. Ктсати более того я только что заметил что шаги после провала не выполняются. Теперь все встало на свои места.
И свою задачу по поводу "что-то сделать в зависимости от вывода в консоль" тоже решил успешно
Вот с помощью такого плагина
https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task
Там можно указать что искать в логе и в зависимости от этого запускать shell скрипт (т.е. мой python скрипт)
Теперь осталось разобраться все-таки со связками выше. Что лушче использовать. Понимаю в душе, что Gradle специализированный сборочный тул со своими плюшками. Но боюсь что перейдя на его использование я лишусь гибкости и легкости программирования как в питоне с его батарейками. Надо понять что я получу взамен.
(К примеру на python я разобрался как работать с Metadata и Tooling API и оказалось что это МЕГА просто и код занимает реально пару строчек кода), что не скажешь о Java реализациях.
Согласен с доводами. Gradle лучше чем ant. Теперь осталось выяснить какая связка лучше: Jenkins + Gradle(Groove) Jenkins + Python shell scripts На счет контекста - понял свою ошибку - я неправильно понял архитектуру Jenkins Job. В принципе логично что каждый step должен быть атомарной единицей и не зависеть от предыдущего шага. Ктсати :D более того я только что заметил что шаги после провала не выполняются. Теперь все встало на свои места. И свою задачу по поводу "что-то сделать в зависимости от вывода в консоль" тоже решил успешно :D Вот с помощью такого плагина https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task Там можно указать что искать в логе и в зависимости от этого запускать shell скрипт (т.е. мой python скрипт) Теперь осталось разобраться все-таки со связками выше. Что лушче использовать. Понимаю в душе, что Gradle специализированный сборочный тул со своими плюшками. Но боюсь что перейдя на его использование я лишусь гибкости и легкости программирования как в питоне с его батарейками. Надо понять что я получу взамен. (К примеру на python я разобрался как работать с Metadata и Tooling API и оказалось что это МЕГА просто и код занимает реально пару строчек кода), что не скажешь о Java реализациях.
Написано же куча оберток, где нужно просто вызвать определенный метод.
[quote="Dmitry Shnyrev"]что не скажешь о Java реализациях. [/quote] Написано же куча оберток, где нужно просто вызвать определенный метод.
Для Gradle + Salesforce ты используешь этот плагин?
https://github.com/fundacionjala/enforce-gradle-plugin
Для Gradle + Salesforce ты используешь этот плагин? https://github.com/fundacionjala/enforce-gradle-plugin
Я не использую плагинов)
[quote="Dmitry Shnyrev"]Для Gradle + Salesforce ты используешь этот плагин? https://github.com/fundacionjala/enforce-gradle-plugin[/quote] Я не использую плагинов)
Т.е. ты сразу пишешь все на Groovy? Дергаешь API?
[quote="Gres"]Я не использую плагинов)[/quote] Т.е. ты сразу пишешь все на Groovy? Дергаешь API?
Ага, запрос в 1 строчку, а возвращается уже готовый объект, и делай с ним все, что хочешь.
[quote="Dmitry Shnyrev"]Т.е. ты сразу пишешь все на Groovy? Дергаешь API?[/quote] Ага, запрос в 1 строчку, а возвращается уже готовый объект, и делай с ним все, что хочешь.
Можешь скинуть пример кода?
Можешь скинуть пример кода?