вторник, 31 марта 2020 г.

Jenkins и upload to S3

Жил-был дженкинс, работал себе, задачи на нём вида Freestyle крутились себе. И сразу оговорка, нода, на которой запускалась задача выкатки, не в амазоне, дальше это будет важно.

Есть для выкатки через freestyle плагин s3 publish, он же /s3/ в плагинах. Но есть у него огромный, гигантский косяк: он не умеет в ACL. Вообще не умеет. Ни в каком виде. А на офсайте жалкая отмазка "выставите нужные права на весь бакет через IAM", что разумеется далеко не всегда приемлемо.
Да, у него есть metadata, но толку от неё ровно 0. Потому что оно мало того что не умеет Canned ACL, так даже x-amz- не выставить, там захардкожен префикс, что-то вроде x-amz-meta-, и ничего с этим не сделать. Ладно, не было печали, посмотрим другие варианты.
aws s3 cp|sync
s3cmd put|sync
итд - поскольку нода не в амазоне, мы не можем настроить IAM на выкатку без токена, а по некоторым причинам его могут не давать сделать.
Хорошо, есть вроде неплохой плагин aws pipeline plugin, он умеет сильно больше чем s3 plugin, поставим. И первый косяк, оно не умеет в freestyle. Надо переписывать задачу в pipeline. Что ж, давно было желание, переписали. Второй косяк. s3Upload не работает, потому что конфликт имён с s3 plugin. И как только мы удаляем s3 plugin, у нас ломаются все связанные задачи. А их может быть больше десятка. Но и это не всё. Косяк 3. Похоже, что s3 plugin выкатывал файлы через Jenkins, потому что оно просто работало. А aws pipeline делает это с самой ноды, и ничего не работает. Никто же не добавил AWS_ переменные. Но даже если добавить withAWS - может не заработать, если у нас не 2 переменные а 3: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN. И передать их как-то - не выйдет. И выставить через def в начале пайплайна - тоже не работает. Так что 2 плагина, функционал которых фактически не пересекается, вместе стоять не могут.

Тут на помощь приходят copyArtifact и более удобный в данном случае stash, при условии что у нас есть нода в амазоне, на которой можно будет сделать unstash + s3Upload.

На то, чтобы выяснить и отладить это всё, может уйти не 1 день.
Если бы удалось пропихнуть фикс в s3 plugin с переименованием s3Upload во что-то ещё (в этом модуле всего 2 функции, в отличие от заточенный под пайплайны aws pipeline), то они могли бы существовать мирно вместе. А так - им надо обоим ставить тэг Conflicts и блокировать совместную установку.

Комментариев нет:

Отправить комментарий