[Разработка под iOS, Разработка мобильных приложений] Онбординг нового разработчика с помощью Ansible
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Ваш новый разработчик только что закончил подписывать трудовой договор и с горящими глазами готов закрывать по 15 задач в день. На его пути стоит лишь одно препятствие — новый ноутбук, который пока что не настроен должным образом. Чаще всего процесс настройки окружения описывается в документе, который выдается новому разработчику. Мы не сильно далеко ушли и тоже составили такой список.
- Установка Xcode
- Настройка локального git репозитория
- Настройка окружения
- Настройка проекта
- Ознакомление с документацией
- Настройка таск-трекера (Jira/Youtrack)
Чтобы не тратить драгоценное время разработчика на ручную настройку нового ноутбука, мы автоматизировали 3 и 4 пункты, т.к. они являются самыми трудозатратными.Итак, давайте сперва рассмотрим настройку окружения.Настройка окруженияВ нашем случае настройка окружения состоит из нескольких пунктов:1. Установка brew зависимостей2. Установка mint зависимостей3. Установка и настройка ruby4. Установка и настройка pythonЧтобы упростить настройку вышеперечисленных пунктов, мы воспользовались Ansible. Он помогает решать множество задач, таких как управление сетями, операционными системами, развертка серверной инфраструктуры, – мы же ограничились простой настройкой локальной машины черезplaybooks.Но и тут мы не остановились и решили еще больше облегчить жизнь нового разработчика и написали скрипт, который устанавливает ansible и производит настройку вышеперечисленных пунктов.В конечном итоге скрипт получился вот таким:
#!/usr/bin/env bash
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && sudo python get-pip.py
sudo pip install ansible
cd $(dirname $0) && ansible-playbook main.yml
Тут происходит следующее:
- Установка менеджера пакетов pip
- Установка Ansible
- Запуск наших задач из main.yml
Осталось разобраться, что находится в main.yml. А там всего лишь
- hosts: localhost
roles:
- common_setup
Здесь hosts отвечает за те машины, на которых мы хотим запустить наши задачи, в нашем случае это локальная машина, а roles содержит информацию о том, какие задачи нужно выполнить, переменные и метаинформацию.roles ожидает, что файлы будут находиться в определенных папках, в нашем случае иерархия выглядит вот так
Каждая папка (meta, tasks и vars) должна содержать файл main.yml.Все команды можно уместить в главном main.yml, но подход через roles обеспечивает большую читаемость и модульность.Больше всего нас интересует папка tasks, в которой собраны задачи, выполняющие настройку. Рассмотрим структуру задачи, которая выполняет установку и настройку Ruby с помощью rvm.
---
- name: Check if RVM already installed
stat: path=~/.rvm
register: rvmdir
changedwhen: false
- name: Install RVM for a user
command: bash -c "\curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles"
when: rvmdir.stat.exists == False
- name: Add RVM to profile
command: bash -c "~/.rvm/bin/rvm get stable --auto-dotfiles"
when: rvmdir.stat.exists == False
- name: Add RVM to zshrc
command: bash -c "echo '\n[ -s ${HOME}/.rvm/scripts/rvm ] && source ${HOME}/.rvm/scripts/rvm' >> ~/.zshrc"
when: rvmdir.stat.exists == False
- name: Install {{ rubyversion }}
command: bash -c "~/.rvm/bin/rvm install {{ rubyversion }}"
when: rvmdir.stat.exists == False
- name: Set Ruby Default
command: bash -c "~/.rvm/bin/rvm --default use {{ rubyversion }}"
when: rvmdir.stat.exists == False
- name: Install Ruby Gems required for iOS app developement
gem: name={{ item.name }} version={{ item.version }} state={{ if item.version is defined nil else latest }}
withitems: "{{ rubygems_packages_to_install }}"
when: rvmdir.stat.exists == False
- Проверяем, установлен ли rvm.name - название задачиstat - путь до rvmregister сохраняет переменную для последующего использованияchanged_when переопределяет поведение смены состояния машины после исполненияМы точно знаем, что после исполнения этой задачи состояние не изменится, поэтому просто ставим false. Более подробно использование этой команды описаноздесь.
- Устанавливаем rvm.name - название задачиcommand - команда для выполненияwhen - условие для выполненияУсловием для выполнения здесь является отсутствие установленного ранее rvm, мы можем узнать это из сохраненной на предыдущем шаге переменной rvmdir.
- Настраиваем rvm. Параметры аналогичны.
- Добавляем строки в .zshrc конфиг. На MacOS Catalina этот шаг обязателен, так как zsh теперь используется по умолчанию.
- Устанавливаем нужную нам для разработки версию Ruby. Тут параметры тоже аналогичны, единственным отличием будет использование нашей переменной из папки vars. Объявлена она в main.yml следующим образом:rubyversion: ruby-2.6.5
- Назначаем свежеустановленную версию Ruby версией по умолчанию
- Устанавливаем нужные гемы, в нашем случае это просто bundler. Тут также используется переменная из папки vars, объявленная таким образом:rubygems_packages_to_install: - name: bundler version:2.1.4
На этом настройка окружения закончена, можем переходить к настройке самого проекта.Настройка проектаПод настройкой проекта мы подразумеваем полную установку всех зависимостей и других необходимых вещей для успешного билда.Скрипт для настройки проекта выглядит следующим образом:
#!/usr/bin/ruby
require 'FileUtils'
require 'colorize'
RESOURCES_DIRECTORY = './Scripts/Resources'.freeze
XCODE_DIRECTORY = '~/Library/Developer/Xcode'.freeze
def setup_git_hooks
puts "Setting up git hooks".blue.bold
git_hooks_path = '.git/hooks'
FileUtils.mkdir_p(git_hooks_path)
Dir["#{RESOURCES_DIRECTORY}/Git hooks/*"].each do |file|
FileUtils.cp_r(file, "#{git_hooks_path}/#{File.basename(file)}")
end
end
def setup_file_templates
puts "\nSetting up file templates".blue.bold
file_templates_path = File.expand_path("#{XCODE_DIRECTORY}/Templates/File Templates/Tests")
FileUtils.mkdir_p(file_templates_path)
Dir["#{RESOURCES_DIRECTORY}/Templates/*.xctemplate"].each do |file|
FileUtils.cp_r(file, "#{file_templates_path}/#{File.basename(file)}")
end
end
def setup_xcode_snippets
puts "\nSetting up xcode snippets".blue.bold
need_to_reboot_xcode = false
code_snippets_path = File.expand_path("#{XCODE_DIRECTORY}/UserData/CodeSnippets")
FileUtils.mkdir_p(code_snippets_path)
Dir["#{RESOURCES_DIRECTORY}/Snippets/*.codesnippet"].each { |file|
path = "#{code_snippets_path}/#{File.basename(file)}"
next if File.file?(path)
need_to_reboot_xcode = true
FileUtils.cp_r(file, path)
}
return unless need_to_reboot_xcode
puts 'Quiting Xcode'.blue
system('killall Xcode')
end
def setup_gems
puts "\nSetting up gems".blue.bold
system('bundle install')
end
def setup_mocks
puts "\nSetting up mocks".blue.bold
system('cd $(pwd) && swiftymocky generate')
end
def setup_projects
puts "\nSetting up projects".blue.bold
system('bundle exec rake update_projects')
end
# Steps
Dir.chdir("#{File.expand_path(File.dirname(__FILE__))}/..")
setup_git_hooks
setup_file_templates
setup_xcode_snippets
setup_gems
setup_mocks
setup_projects
Что тут вообще происходит:
- Настройка гит-хуков. В нашем случае к коммиту всегда прибавляется номер задачи, который берется из названия ветки.
- Установка темплейтов для генерации модулей.
- Установка полезных сниппетов.
- Установка гемов.
- Генерация моков.
- Настройка проекта.
Чуть подробнее, пожалуй, стоит остановиться на последнем шаге. В нем мы подтягиваем и кэшируем все нужные Carthage зависимости и генерируем файлы проектов с помощью XcodeGen.ЗаключениеНастройка проекта и установка всех зависимостей занимает в нашем случае около 1 часа, который новый разработчик может потратить на чтение других вводных документов и общение с наставником. Благодаря этим скриптам мы точно знаем, что окружения всех наших разработчиков синхронизированы, тем самым мы можем избежать многих непонятных ошибок. В итоге мы сэкономили время нового разработчика при онбординге и позволили ему быстрее приступить к задачам. Более того, этими же скриптами мы настраиваем билд-агенты, получая от скриптов двойную пользу.
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка мобильных приложений, Софт, Социальные сети и сообщества, Финансы в IT] Мобильное приложение Robinhood запретило покупать акции AMC, Blackberry, Nokia и GameStop
- [Разработка мобильных приложений, Законодательство в IT] Большинство российских государственных мобильных приложений используют иностранные трекеры
- [Разработка мобильных приложений, Разработка под Android, Дизайн мобильных приложений, Аналитика мобильных приложений] Приложение отвечает: как мы уменьшили количество ANRs в шесть раз. Часть 2, про исправление ошибок (перевод)
- [.NET, Разработка мобильных приложений, Сетевые технологии, C#, История IT] Менеджер приложений для Windows Mobile
- [Java, Разработка мобильных приложений, Разработка под Android] Android Bluetooth Low Energy (BLE) – готовим правильно, часть #4 (bonding) (перевод)
- [Разработка мобильных приложений, Разработка под Android] Ликбез по Navigation Component: тем, кто пропустил все туториалы
- [Разработка мобильных приложений, Разработка под Android] Safe Args — верный помощник Navigation Component
- [Разработка мобильных приложений, Разработка под Android] Navigation Component и multi backstack navigation
- [Программирование, Разработка мобильных приложений, Конференции, Flutter] Анонс вебинара «Почему компании всё чаще выбирают Flutter и что это значит для разработчиков»
- [Разработка под iOS, Софт, Социальные сети и сообщества] В Telegram появился и исчез импорт чатов из WhatsApp
Теги для поиска: #_razrabotka_pod_ios (Разработка под iOS), #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_ios, #_avtomatizatsija_rutiny (автоматизация рутины), #_ansible, #_blog_kompanii_vivid_money (
Блог компании Vivid Money
), #_razrabotka_pod_ios (
Разработка под iOS
), #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:57
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Ваш новый разработчик только что закончил подписывать трудовой договор и с горящими глазами готов закрывать по 15 задач в день. На его пути стоит лишь одно препятствие — новый ноутбук, который пока что не настроен должным образом. Чаще всего процесс настройки окружения описывается в документе, который выдается новому разработчику. Мы не сильно далеко ушли и тоже составили такой список.
#!/usr/bin/env bash
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && sudo python get-pip.py sudo pip install ansible cd $(dirname $0) && ansible-playbook main.yml
- hosts: localhost
roles: - common_setup Каждая папка (meta, tasks и vars) должна содержать файл main.yml.Все команды можно уместить в главном main.yml, но подход через roles обеспечивает большую читаемость и модульность.Больше всего нас интересует папка tasks, в которой собраны задачи, выполняющие настройку. Рассмотрим структуру задачи, которая выполняет установку и настройку Ruby с помощью rvm. ---
- name: Check if RVM already installed stat: path=~/.rvm register: rvmdir changedwhen: false - name: Install RVM for a user command: bash -c "\curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles" when: rvmdir.stat.exists == False - name: Add RVM to profile command: bash -c "~/.rvm/bin/rvm get stable --auto-dotfiles" when: rvmdir.stat.exists == False - name: Add RVM to zshrc command: bash -c "echo '\n[ -s ${HOME}/.rvm/scripts/rvm ] && source ${HOME}/.rvm/scripts/rvm' >> ~/.zshrc" when: rvmdir.stat.exists == False - name: Install {{ rubyversion }} command: bash -c "~/.rvm/bin/rvm install {{ rubyversion }}" when: rvmdir.stat.exists == False - name: Set Ruby Default command: bash -c "~/.rvm/bin/rvm --default use {{ rubyversion }}" when: rvmdir.stat.exists == False - name: Install Ruby Gems required for iOS app developement gem: name={{ item.name }} version={{ item.version }} state={{ if item.version is defined nil else latest }} withitems: "{{ rubygems_packages_to_install }}" when: rvmdir.stat.exists == False
#!/usr/bin/ruby
require 'FileUtils' require 'colorize' RESOURCES_DIRECTORY = './Scripts/Resources'.freeze XCODE_DIRECTORY = '~/Library/Developer/Xcode'.freeze def setup_git_hooks puts "Setting up git hooks".blue.bold git_hooks_path = '.git/hooks' FileUtils.mkdir_p(git_hooks_path) Dir["#{RESOURCES_DIRECTORY}/Git hooks/*"].each do |file| FileUtils.cp_r(file, "#{git_hooks_path}/#{File.basename(file)}") end end def setup_file_templates puts "\nSetting up file templates".blue.bold file_templates_path = File.expand_path("#{XCODE_DIRECTORY}/Templates/File Templates/Tests") FileUtils.mkdir_p(file_templates_path) Dir["#{RESOURCES_DIRECTORY}/Templates/*.xctemplate"].each do |file| FileUtils.cp_r(file, "#{file_templates_path}/#{File.basename(file)}") end end def setup_xcode_snippets puts "\nSetting up xcode snippets".blue.bold need_to_reboot_xcode = false code_snippets_path = File.expand_path("#{XCODE_DIRECTORY}/UserData/CodeSnippets") FileUtils.mkdir_p(code_snippets_path) Dir["#{RESOURCES_DIRECTORY}/Snippets/*.codesnippet"].each { |file| path = "#{code_snippets_path}/#{File.basename(file)}" next if File.file?(path) need_to_reboot_xcode = true FileUtils.cp_r(file, path) } return unless need_to_reboot_xcode puts 'Quiting Xcode'.blue system('killall Xcode') end def setup_gems puts "\nSetting up gems".blue.bold system('bundle install') end def setup_mocks puts "\nSetting up mocks".blue.bold system('cd $(pwd) && swiftymocky generate') end def setup_projects puts "\nSetting up projects".blue.bold system('bundle exec rake update_projects') end # Steps Dir.chdir("#{File.expand_path(File.dirname(__FILE__))}/..") setup_git_hooks setup_file_templates setup_xcode_snippets setup_gems setup_mocks setup_projects
=========== Источник: habr.com =========== Похожие новости:
Блог компании Vivid Money ), #_razrabotka_pod_ios ( Разработка под iOS ), #_razrabotka_mobilnyh_prilozhenij ( Разработка мобильных приложений ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:57
Часовой пояс: UTC + 5