Votre nouveau développeur vient de terminer la signature d'un contrat de travail et est prêt à fermer 15 tâches par jour avec les yeux brûlants. Il n'y a qu'un seul obstacle sur son chemin: un nouvel ordinateur portable qui n'a pas encore été configuré correctement. Le plus souvent, le processus de configuration de l'environnement est décrit dans un document remis à un nouveau développeur. Nous ne sommes pas allés très loin et avons également fait une telle liste.
Installer Xcode
Configurer un référentiel git local
Mise en place de l'environnement
Configuration du projet
Lire la documentation
Configurer un suivi des tâches (Jira / Youtrack)
Afin de ne pas perdre un temps précieux aux développeurs sur la configuration manuelle d'un nouvel ordinateur portable, nous avons automatisé les étapes 3 et 4, car ce sont les plus exigeants en main-d’œuvre.
Voyons donc d'abord la configuration de l'environnement.
Mise en place de l'environnement
Dans notre cas, la mise en place de l'environnement se compose de plusieurs points:
1. Installation des dépendances de brassage
2. mint
3. ruby
4. 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
- rvm
register
changed_when
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 , . , , .
. , -, .