Tu nuevo desarrollador acaba de terminar de firmar un contrato de trabajo y está listo para cerrar 15 tareas al día con ojos ardientes. Solo hay un obstáculo en su camino: una nueva computadora portátil que aún no se ha configurado correctamente. Muy a menudo, el proceso de configuración del entorno se describe en un documento que se envía a un nuevo desarrollador. No fuimos muy lejos y también hicimos esa lista.
Instalación de Xcode
Configurando un repositorio de git local
Configurando el medio ambiente
Configuración del proyecto
Leer la documentación
Configuración de un rastreador de tareas (Jira / Youtrack)
Para no perder el valioso tiempo del desarrollador configurando manualmente una nueva computadora portátil, hemos automatizado los pasos 3 y 4, porque son los que requieren más mano de obra.
Así que veamos primero cómo configurar el entorno.
Configurando el medio ambiente
En nuestro caso, la configuración del entorno consta de varios puntos:
1. Instalación de dependencias de preparación
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 , . , , .
. , -, .