Подскажите по Jenkins: разные задачи для разных узлов
какой язык ? как собираются проекты (система сборки типа MSBuild) ? на какой OS стоит jenkins? подписывать на той же машине, где компилируются проекты гораздо проще. обязательно на другой машине это делать?
исходники и сборочная среда изолированы от интернета.
на подписывающей машине должен быть интернет - для доверенного timestamp.
микрсофот для моих целей доверяет только http://timestamp.verisign.com/scripts/timstamp.dll к сожалению
обмен через доверенную расшаренную папку
вот думаю, как разрулить.
Язык везде С, вижуалстудия, msbuild
Язык везде Ссобираешь через MSBuild?
сколько бинарей требуется подписать (кол-во бинарей \ кол-во мегабайт)?
дебаг/релиз х64 х86 1 длл 1 ехе = 8 штук.
всего 20 мегабайт
дллка в среднем 1.5мб
экзешник 3мб
msbuild, да.кол-во нужно было чтобы оценить следует ли скопом подписывать либо поштучно. думаю, при таком малом кол-ве бинарей можно и поштучно
дебаг/релиз х64 х86 1 длл 1 ехе = 8 штук.
в общем, я решал эту задачу немного в других условиях:
1) не jenkins
2) подписывалка локальная
но думаю, подход может сработать и в твоих условиях
1) на CI размещается скрипт (путь к скрипту можно в env var приписать который на вход принимает путь к длл и на выходе дает уже подписанную длл (исходная длл перезаписывается)
2) далее в тех проектах (файл vcxproj) , где требуется подпись вручную (то есть проект надо изменить в notepad.exe) вставляется (лучше через импорт другого документа типа Signing.proj) волшебный xml, который после билда бинаря запускает скрипт из пункта 1
подписывание опять же можно сделать опциональным в зависимости от env var
может, ты так уже пробовал сделать? с каким сложностями столкнулся?
Вручную подпись через signtool.
Процесс сейчас выглядит как-то так:
01.build_all.bat - строит всё что нужно, копирую папку Bin в обменник.
02.sign_all.bat - запускаю на подписывалке, она подписывает файлы в Bin, копирую обратно.
03.build_distr.bat - собираю дистрибутив, в обменку
04.sign_distr.bat - подписать дистрибутив
05.export.bat - положить на раздачу для тестов.
Вот думал, что разными задачами/типами узлов можно сделать что-то подобное на Jenkins
пока не понятно, можно ли подписывалку втянуть под управление jenkins, или написать самописный сервис, который подписывает всё подряд что ему подсовывают
Процесс сейчас выглядит как-то таккак-то многовато батников. почему сборку не делаешь встроенными средствами CI (для запуска msbuild обычно есть встроенные таски)?
если в каждом проекте пропилить подписывалку, то имхо самописных скриптов будет меньше.
MSBuild собирает проект, сам проект уже подписывает свой выхлоп.
для запуска удаленного скрипта можно заюзать psexec
как-то многовато батников. почему сборку не делаешь встроенными средствами CI (для запуска msbuild обычно есть встроенные таски)?Скрипт сборки практичнее, потому что покрывает сразу два кейса:
- сборка в рамках CI
- сборка на произвольно взятой машине
Хотя, да, при этом теряются интерактивность и прочие плюшки от кастомных билдеров CI.
msbuild project.sln /t:Rebuild /p:Configuration=Release;Platform=win32
msbuild project.sln /t:Rebuild /p:Configuration=Release;Platform=x64
msbuild project.sln /t:Rebuild /p:Configuration=Debug;Platform=win32
msbuild project.sln /t:Rebuild /p:Configuration=Debug;Platform=x64
Я не нашёл способа встроить подписывание в проект
У меня проект на практически чистом С (условно - драйвер). Подписывание есть только в managed.
Вот тут даже советуют вручную подписывать:
http://msdn.microsoft.com/en-us/library/ms537364%28v=vs.85%...
Предлагаете вставлять подписывание как custom build step ?
ну и чем это лучше батника?
к тому же у меня условие - подписывать на другой машине, отличной от сборочной.
батник на построение выглядит как мычание:встроенные средства хороши тем, что есть доп возможности типа отключения некоторых шагов сборки и они тупо удобнее (поставить галочку через web гораздо проще, нежели менять скрипты на удаленной машине или в системе контроля версий). к примеру, для построения релиза продукта вполне можно отключить сборку Debug
Я не нашёл способа встроить подписывание в проектдля сей + MSBuild нет такого механизма (во всяком случае, пару лет назад я копал эту тему и ничего не нашел). приходится городить скрипты
У меня проект на практически чистом С (условно - драйвер). Подписывание есть только в managed.
Предлагаете вставлять подписывание как custom build step ?типа того, я использовал секцию AfterBuild в vcxproj:
<Project>
.....
<Import Project="SCRIPTS\Signing.proj" />
<Target Name="AfterBuild">
<CallTarget Targets="Sign" />
</Target>
</Project>
ну и чем это лучше батника?тем, что это интегрировано с системой сборки MSBuild (хранится внутри проекта) и не требует ручного запуска отдельного скрипта. если проекты используются в разных солюшенах, то такой подход может упростить настройку билдов
к тому же у меня условие - подписывать на другой машине, отличной от сборочной.это просто приведет к более сложному скрипту для подписывания
в общем, я поделился способом, который использовал сам. как говорится, не нравится - не ешь =)
Оставить комментарий
yolki
Есть проект.Нужно его:
1) собрать
2) подписать бинарники
3) собрать дистрибутив
4) подписать дистрибутив
5) протестировать на разных платформах.
я пока справился только с 1).
У меня есть отдельная машина, на которой есть ключ и сертификат - для CodeSigning. как бы автоматизировать этот процесс с jenkins?
нужно доставить туда пачку бинарников, подписать, забрать обратно.
Собрать дистрибутив из подписанных бинарников и проделать тоже самое с дистрибутивом - отправить на подписывалку, подписать, забрать обратно, распределить по тестовым узлам.