Всем привет. В преддверии старта курсов  "iOS Developer. Basic" и "iOS Developer. Professional", публикуем заключительную часть статьи про интеграцию CI/CD для нескольких сред с Jenkins и Fastlane.  А также приглашаем вас на бесплатный демо-урок по теме: "Combine до iOS 13 и как добавить SwiftUI 2.0 в любое приложение"  В предыдущей части нам удалось создать задачу Jenkins, загружающую наше приложение в Testflight для разных веток под разные фичи. Для достижения цели, намеченной в первой части, остается только реализовать возможность делать это для разных сред, например, для стейджа и тест продакшн среды. Разные среды эквивалентны разным конфигурациям Xcode (т. е. различным пользовательским схемам) с определенными настройками сборки под каждую. Если мы еще раз взглянем на три файла, написанные нами раньше: MyScipt.groovy, Deploy.groovy и Fastfile, мы заметим, что там есть свойства, зависящие от конфигурации, а именно: Идентификатор приложения Конфигурация, которая соответствует уникальной схеме, созданной в Xcode Имя профиля обеспечения (provisioning profile) Эти свойства используются в разных местах, в основном внутри лейнов Fastlane. Следовательно, для достижения нашей цели мы должны передавать эти свойства в качестве параметров в лейнах и использовать разные значения для каждой конфигурации. Синтаксис лейна с параметрами следующий:  а параметр может быть получен следующим образом: В нашем случае нам нужны три разных параметра, описанных выше.  Теперь предположим, что у нас есть среды под названием Staging и TestProduction. Нам нужно будет реализовать в Jenkins два разных задания, таких же как задание, которое мы создавали ранее, и подключить их к двум разным скриптам, скажем, Stg.groovy и TestProduction.groovy. Эти скрипты будут идентичны, за исключением следующих трех параметров:  Stg-parameters.groovy   А получать к ним доступ внутри лейна сборки, мы будем следующим образом:  TestProduction-parameters.groovy Функция deploy внутри Deploy.script будет получать эти параметры в сигнатуре метода:  Стадии, использующие эти параметры: Run Tests, Build и Upload to Testflight - это стадии, требующие параметризации. Остальные (Checkout repo, Install dependencies, Reset simulators и Cleanup в конце) останутся прежними. Мы реализуем Run tests, передавая configuration в качестве параметра, чтобы использовать его внутри соответствующего лейна: Теперь самая сложная часть - настроить лейн test внутри Fastfile, чтобы он использовал этот параметр. Получаем параметры следующим образом: Итак, лейн test, который должен использовать только параметр configuration, теперь будет выглядеть так:    Обратите внимание, что в поле scheme мы используем параметр configuration, поскольку схема разнится от среды к среде. Стадии Build необходимы все три параметра. Мы реализуем команду build Fastlane, передавая эти три параметра. Стадия Build, которая теперь внутри функции deployWith(), будет выглядеть следующим образом:   Это означает, что лейн build останется точно таким же, как и раньше, за исключением команд которые используют эти три параметра:    Легко заметить, что везде, где используются значения bundle_id, configuration и provisioning_profiles, мы теперь используем значения этих параметров вместо захардкоженных. Мы используем команду Fastlane upload_to_testflight, передавая ей в качестве параметра bundle_id. Стадия Upload to TestFlight теперь тоже находится внутри функции deployWith() файла Deploy.groovy и будет выглядеть, как показано ниже:   Соответствующий лейн внутри FastFile будет теперь использовать bundle_id таким образом:    И на этом все! Нам удалось использовать одни и те же Deploy.groovy и Fastfile для различных конфигураций. Но как мы собираемся разделять эти параметры для разных конфигураций? В Jenkins вместо одной задачи для всех конфигураций мы теперь можем создавать разные задачи под каждую, которые будут идентичными, за исключением скрипта, который они используют. Поэтому, как я упоминал ранее, мы создаем задачу Stg и используем скрипт Stg.groovy, приведенный ниже:   Точно так же для конфигурации TestProduction, мы создаем новую идентичную задачу и используем скрипт TestProduction.groovy:   Обратите внимание, что все они используют один и тот же скрипт Deploy.groovy и один и тот же файл Fastfile, а именно:    Fastfile_parameterized  Как я упоминал в предыдущем разделе, нашей изначальной целью было реализовать автоматическую загрузку билдов по нажатию одной кнопки в Testflight: a) для разных веток под разные фичи b) для нескольких конфигураций, соответствующих разным средам Нам удалось достичь вышеупомянутое с помощью разных задач в Jenkins, которые могут быть настроены под разные ветки. Каждая задача соответствует своей конкретной конфигурации Xcode и, в добавку, своей конкретной среде. Все они используют одни и те же 2 основных файла (Deploy.groovyи Fastlane) и разные исходные файлы скриптов (Stg.groovy и TestProduction.groovy). Конечно, вы можете распространить их сразу на несколько сред с помощью простого скрипта величиной всего в несколько строчек кода! Спасибо, за ваше внимание ?, я надеюсь, что эта серия оказалась для вас полезной ?! Особая благодарность Павлосу-Петросу Турнарису и Джорджу Цифрикасу за их ценные отзывы. Twitter: @elenipapanikolo Узнать подробнее о курсах:  - iOS Developer. Basic" - iOS Developer. Professional Интеграция CI/CD для нескольких сред с Jenkins и Fastlane. Часть 1 Интеграция CI/CD для нескольких сред с Jenkins и Fastlane. Часть 2  Редактор