Size: a a a

2021 February 11

D

Dmitrич in jenkins_ru
Никитяо
вспомнил, опять огрёб)
в груви 2 нет из коробки парсинга ямла.
Да есть readYaml, но в ActiveChoice к великому сожалению это не прокатит
Подгружаете какой-нибудь snakeyaml импортм предварительно закинув jarники в extdir ? Да согласен эт прям такое
источник

Н

Никитяо in jenkins_ru
Dmitrич
Подгружаете какой-нибудь snakeyaml импортм предварительно закинув jarники в extdir ? Да согласен эт прям такое
есть места, в некоторых особо закрытых сетевых контурах некоторых банков, где такая роскошь недоступна и остается только плакать

щас у меня даже питона и yq в системе нет, сижу чешу репу, думаю как выкрутиться
источник

A

Anton 🐻 in jenkins_ru
Anton 🐻
Привет. странная вещь, использую Ansible plugin, судя по логу он выполняет $ ansible-playbook playbook.yml -i /tmp/inventory3560963680017161746.ini --private-key /tmp/ssh4090131902641729177.key -u jenkins

что выдаёт ошибку
fatal: [node]: UNREACHABLE! => {"changed": false, "msg": "All items completed", "results": [{"ansible_loop_var": "item", "item": {"path": "/srv/"}, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).", "unreachable": true}]}

но если ту же команду запускаю ручками из под пользователя дженкинса - всё ок. очень странно.
если поменять кред с ключа на логин/пароль, то работает 😱
источник

D

Dmitrич in jenkins_ru
Никитяо
есть места, в некоторых особо закрытых сетевых контурах некоторых банков, где такая роскошь недоступна и остается только плакать

щас у меня даже питона и yq в системе нет, сижу чешу репу, думаю как выкрутиться
если есть локальное хранилище артефактов типа нексуса, можно попробовать через grab )
источник

D

Dmitrич in jenkins_ru
unixshaman
Добрый день! Можете подсказать по groovy коду, пытаюсь собрать словарь для распараллеливания через команду parallel.
for (int i = 0; i < reservedAgents.size(); i++) {
   def agent = reservedAgents[i]

   parallelTasks["Выполнение тестов на агенте ${agent.name}"] = {
       while (true) {
           def test = getTestForExecution(so)
           println("Выдаем на выполнение тест ${test.name}")

           if (test == null) break

           runNalogTestOnHost(..., test,...)
       }
       reservedAgents.remove(agent)
   }
}
parallel parallelTasks


Переменная test - у меня получается не как копия объекта в поток передается, а как есть, поэтому, при изменении test во второй итерации for, значение test становится одинаковым для всех потоков.

Как мне отдельную копию переменной, для каждого потока? Использовать словарь, или можно как-то проще сделать? Есть типо специальные инструкции для этого?
а что конкретно вы хотите тут сделать ? не возникает ли тут ситуации когда вы с самого начала выдаете одни и те же тесты когда getTestForExecution возвращает один и тот же объект?
источник

D

Dmitrич in jenkins_ru
Dmitrич
а что конкретно вы хотите тут сделать ? не возникает ли тут ситуации когда вы с самого начала выдаете одни и те же тесты когда getTestForExecution возвращает один и тот же объект?
и почему мне кажется этот код очень знакомым...
источник

u

unixshaman in jenkins_ru
Dmitrич
а что конкретно вы хотите тут сделать ? не возникает ли тут ситуации когда вы с самого начала выдаете одни и те же тесты когда getTestForExecution возвращает один и тот же объект?
Нет, я там создал объект locker и сделал критическую секцию, там все ок. Я короче уже порешал проблему, словарь просто сделал до цикла, и ключ словаря - хост, а значение - как раз объект теста.
источник

u

unixshaman in jenkins_ru
Dmitrич
и почему мне кажется этот код очень знакомым...
Возможно, я уже сюда приходил пол годик назад с этим, когда писал такое
источник

Н

Никитяо in jenkins_ru
Dmitrич
если есть локальное хранилище артефактов типа нексуса, можно попробовать через grab )
да там тоже все надо согласовывать несколько месяцев(

в принципе идеи есть
источник

u

unixshaman in jenkins_ru
Dmitrич
и почему мне кажется этот код очень знакомым...
Но вряд ли, вы это где-то видели у кого-то, потому что я написал собственный механизм общения с агентами (их резервирование), и использую там костыльную систему для выполнения команд на агентах, которой тоже ни у кого нет
источник

D

Dmitrич in jenkins_ru
unixshaman
Но вряд ли, вы это где-то видели у кого-то, потому что я написал собственный механизм общения с агентами (их резервирование), и использую там костыльную систему для выполнения команд на агентах, которой тоже ни у кого нет
команды посылаются случаем не в службу на машине, где локально выполняются то ли в батниках то ли в ps ?
источник

Н

Никитяо in jenkins_ru
unixshaman
Добрый день! Можете подсказать по groovy коду, пытаюсь собрать словарь для распараллеливания через команду parallel.
for (int i = 0; i < reservedAgents.size(); i++) {
   def agent = reservedAgents[i]

   parallelTasks["Выполнение тестов на агенте ${agent.name}"] = {
       while (true) {
           def test = getTestForExecution(so)
           println("Выдаем на выполнение тест ${test.name}")

           if (test == null) break

           runNalogTestOnHost(..., test,...)
       }
       reservedAgents.remove(agent)
   }
}
parallel parallelTasks


Переменная test - у меня получается не как копия объекта в поток передается, а как есть, поэтому, при изменении test во второй итерации for, значение test становится одинаковым для всех потоков.

Как мне отдельную копию переменной, для каждого потока? Использовать словарь, или можно как-то проще сделать? Есть типо специальные инструкции для этого?
evaluate("def agent_${i} = getTestForExecution(so)")
источник

D

Dmitrич in jenkins_ru
unixshaman
Нет, я там создал объект locker и сделал критическую секцию, там все ок. Я короче уже порешал проблему, словарь просто сделал до цикла, и ключ словаря - хост, а значение - как раз объект теста.
а я хотел уже предложить вам немного другой вариант решения с убиранием for и while и составлением карты по другому типа` getTestForExecution(so).collectEntries { it-> def test = it  node(reservedAgents.join('||')) {runNalogTest(..., test,...) } }`
источник

u

unixshaman in jenkins_ru
Dmitrич
команды посылаются случаем не в службу на машине, где локально выполняются то ли в батниках то ли в ps ?
Не, у меня на сервере где Jenkins - сервис, который по http получает запросы на выполнение различных скриптов на удаленных агентах, а с помощью psexec или plink я могу на Windows и Linux машинах выполнять любые команды. Это мне позволило убрать весь админски скриптовый код из Jenkins в отдельный репозиторий и не зависеть от Jenkins + дергать руками по надобности в красивом UI все что угодно
источник

u

unixshaman in jenkins_ru
Никитяо
evaluate("def agent_${i} = getTestForExecution(so)")
Вот это я не совсем догоняю пока как работает, но код мне нравится. Спасибо, попробую где-нибудь использовать.
источник

Н

Никитяо in jenkins_ru
unixshaman
Вот это я не совсем догоняю пока как работает, но код мне нравится. Спасибо, попробую где-нибудь использовать.
evaluate выполняет строку как код

т.е. будет куча переменных
agent_1
agent_2
и т.д.
источник

u

unixshaman in jenkins_ru
Dmitrич
а я хотел уже предложить вам немного другой вариант решения с убиранием for и while и составлением карты по другому типа` getTestForExecution(so).collectEntries { it-> def test = it  node(reservedAgents.join('||')) {runNalogTest(..., test,...) } }`
Этот вариант тоже интересен. Я просто пишу в более классическом стиле и справочник по groovy не читал, а вот по таким примерам, где как раз синтаксический сахар, достаточно многое можно подчерпнуть. Спасибо!
источник

u

unixshaman in jenkins_ru
Никитяо
evaluate выполняет строку как код

т.е. будет куча переменных
agent_1
agent_2
и т.д.
Спасибо за объяснение. Теперь понятно!
источник

e

erzqk in jenkins_ru
Привет

Подскажите по вопросу:
Есть виндовая билднода на дженкинсе, есть удаленный сервер на linux (не является нодой дженкинса)
Каким образом можно выполнить shell скрипт на linux от лица виндовой билдноды? Какими плагинами воспользоваться лучше?
источник

M

Max.d 🤖 in jenkins_ru
erzqk
Привет

Подскажите по вопросу:
Есть виндовая билднода на дженкинсе, есть удаленный сервер на linux (не является нодой дженкинса)
Каким образом можно выполнить shell скрипт на linux от лица виндовой билдноды? Какими плагинами воспользоваться лучше?
ssh?
источник