Регистрация  |  Вход

Jenkins + Salesforce

Привет.
Последнее время волей судьбы погрузился в тесную работу с 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? Можете подкинуть информацию для размышления? 

Я был на их презентации они говорили что можно писать плагины для женкинск вроде на груви.

Я был на их презентации они говорили что можно писать плагины для женкинск вроде на груви.

Dmitry Shnyrev
Основной вопрос - как можно связать Jenkins, Ant и скрипты на python?

Зачем тебе кучу билд скриптов на разных языках?
Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.

[quote="Dmitry Shnyrev"]Основной вопрос - как можно связать Jenkins, Ant и скрипты на python?[/quote]
Зачем тебе кучу билд скриптов на разных языках?
Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.

Dmitry Shnyrev
Как вы работаете со скриптами в Jenkins? Можете подкинуть информацию для размышления?

Использую Gradle скрипт, который находит измененные файлы, деплоит их и шлет нотификации.

[quote="Dmitry Shnyrev"]Как вы работаете со скриптами в Jenkins? Можете подкинуть информацию для размышления? [/quote]
Использую Gradle скрипт, который находит измененные файлы, деплоит их и шлет нотификации.

Gres
Зачем тебе кучу билд скриптов на разных языках?
Собери все в 1 и укажи его как билд скрипт, и он будет выполняться при запуске билда.

Ну минимально мне нужно 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 не имеет инструмента для передачи контекста сквозь скрипты.

Dmitry Shnyrev
Просто я крайне удивлен, что такой мощный и старый тул как Jenkins не имеет инструмента для передачи контекста сквозь скрипты.

А причем тут контекст? Он должен просто уметь выполнять скрипты и все.

[quote="Dmitry Shnyrev"]Просто я крайне удивлен, что такой мощный и старый тул как Jenkins не имеет инструмента для передачи контекста сквозь скрипты. [/quote]
А причем тут контекст? Он должен просто уметь выполнять скрипты и все.

Dmitry Shnyrev
На счет Gradle + Groovy, хотел бы услышать о каких-то реальных преимуществах использования.

Лучше, чем 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 реализациях.

Dmitry Shnyrev
что не скажешь о Java реализациях.

Написано же куча оберток, где нужно просто вызвать определенный метод.

[quote="Dmitry Shnyrev"]что не скажешь о Java реализациях. [/quote]
Написано же куча оберток, где нужно просто вызвать определенный метод.

Для Gradle + Salesforce ты используешь этот плагин?
https://github.com/fundacionjala/enforce-gradle-plugin

Для Gradle + Salesforce ты используешь этот плагин?
https://github.com/fundacionjala/enforce-gradle-plugin

Dmitry Shnyrev
Для Gradle + Salesforce ты используешь этот плагин?
https://github.com/fundacionjala/enforce-gradle-plugin

Я не использую плагинов)

[quote="Dmitry Shnyrev"]Для Gradle + Salesforce ты используешь этот плагин?
https://github.com/fundacionjala/enforce-gradle-plugin[/quote]
Я не использую плагинов)

Gres
Я не использую плагинов)

Т.е. ты сразу пишешь все на Groovy? Дергаешь API?

[quote="Gres"]Я не использую плагинов)[/quote]
Т.е. ты сразу пишешь все на Groovy? Дергаешь API?

Dmitry Shnyrev
Т.е. ты сразу пишешь все на Groovy? Дергаешь API?

Ага, запрос в 1 строчку, а возвращается уже готовый объект, и делай с ним все, что хочешь.

[quote="Dmitry Shnyrev"]Т.е. ты сразу пишешь все на Groovy? Дергаешь API?[/quote]
Ага, запрос в 1 строчку, а возвращается уже готовый объект, и делай с ним все, что хочешь.

Можешь скинуть пример кода?

Можешь скинуть пример кода?