Überblick
Ich habe versucht, den Aufbau der Mac-Entwicklungsumgebung mit Ansible zu automatisieren. Notieren Sie sich also, was ich getan und was ich untersucht habe.
Ich wollte so etwas wie Boxen mit Ansible machen. Also habe ich zwei vorbereitet, eine wie our-boxen (Vorlage) und die andere, die ich kopiert und angepasst habe.
--https: //github.com/tell-k/blister-pack .... Grundlegende Setup-Inhalte
--https: //github.com/tell-k/blister-pack-mine ... Ihr persönliches Setup
Informationen zur Verwendung von Blister-Pack finden Sie unter README.rst.
Ich habe die folgenden Dinge getan.
- Automatische Erstellung einer Mac OSX-Entwicklungsumgebung mit Ansible. Installieren Sie die erforderlichen Pakete hauptsächlich mit Hombrew + Homebrew-Fass
- Verwalten Sie wie Boxen die Konstruktionsinhalte (Rolle), indem Sie sie in gemeinsame Teile, Personen und Projekte aufteilen.
--Test mit Serverspec.
- Führen Sie Build / Test mit Travis CI aus
Umweltbau mit Ansible
- Hauptsächlich die meisten von Ansibles Hombrew-Modul und Hombrew-Cask-Modul Konnte installiert werden.
- Um eine Antwort auf die lokale Umgebung auszuführen, schreiben Sie Folgendes in die Inventardatei.
[localhost]
127.0.0.1
[localhost:vars]
ansible_connection=local
Rollenverwaltung
- Wie bei Boxen werden die Konstruktionsinhalte für jedes gemeinsame Teil / Individuum / Projekt separat verwaltet.
├── Makefile
├── README.rst
├── Rakefile
├── callback_plugins
├── hosts
├── playbook.yml
├── roles
│ ├── common # <-Häufig verwendete Rollengruppe
│ ├── people # <-Rollengruppe für jeden Einzelnen
│ └── projects # <-Rollengruppe für jedes Projekt
└── spec
├── common
├── people
├── projects
└── spec_helper.rb
Getestet mit Serverspec
--Ermöglicht das Testen des Build-Inhalts in Ansible mit Serverspec.
- envassert und das [assert-Modul] von ansible (http://docs.ansible.com/test_strategies.html#modules-that-are-useful-for) Sie haben auch die Möglichkeit, -testing zu verwenden.
--Spec-Dateien werden auch durch common / people / projects getrennt.
--Serverspec ist praktisch, da das meiste, was Sie tun möchten, in Dokumentation geschrieben ist.
Erstellen / Testen mit Travis CI
--Travis CI bietet eine OS X-Umgebung als Build-Umgebung (http://docs.travis-ci.com/user/osx-ci-environment).
- Mit ihm bauen / testen
- Wenn Sie OS X verwenden, geben Sie dies einfach in .travis.yml an
- Es scheint, dass Homebrew, Xcode usw. im Voraus enthalten sind.
- Da sudo anscheinend ohne Passwort ausgeführt werden kann, wird es ohne die Option "-K" von ansible ausgeführt.
language: objective-c
os:
- osx
before_install:
- brew update
- brew install python
- brew install ansible
- ansible-playbook -vv playbook.yml -i hosts
script:
- make test
TIPS
Homebrew Update / Upgrade
--Homebrew Update aktualisiert Formel und Homebrew selbst.
--upgrade erstellt / installiert das Zielpaket neu.
- Das Homebrew-Modul von Ansible verfügt über die Optionen "update_homebrew" und "upgrade_all".
--Inventory verfügt über eine Variable, sodass diese Option entsprechend geändert werden kann.
[localhost]
127.0.0.1
[localhost:vars]
homebrew_update=yes #Ja, um immer zu aktualisieren. Stellen Sie no ein, wenn Sie sich langsam fühlen
homebrew_upgrade_all=no #Ja, wenn alle Pakete aktualisiert werden müssen
Es geht nur zum Homebrew-Modul
- name: Update homebrew
homebrew: update_homebrew={{ homebrew_update }} upgrade_all={{ homebrew_upgrade_all }}
Verweis auf Umgebungsvariablen und Pfade
- Für Homebrew etc. können Sie den Pfad mit "hombrew --prefix" "homebrew --cellar" etc. abrufen.
――Wie wird dies an ansible und serverspec übergeben?
- Im Fall von Ansible Mit dem Lookup-Plug-In können Sie auf Umgebungsvariablen und Shell-Ausführungsergebnisse verweisen.
- Wenn Sie es verwenden, um es in einer Inventardatei zu definieren, können Sie im Playbook darauf verweisen.
[localhost]
127.0.0.1
[localhost:vars]
home_path={{ lookup('env','HOME') }}
homebrew_prefix={{ lookup('pipe','echo `brew --prefix`') }}
homebrew_cellar={{ lookup('pipe','echo `brew --cellar`') }}
Verwenden Sie dies in der folgenden Rolle
- name: Copy dnsmaq.conf
copy: src=roles/common/dnsmasq/files/dnsmasq.conf dest="{{ homebrew_prefix }}/etc/dnsmasq.conf" backup=yes
Im Fall von Serverspec habe ich es in spec_helper.rb definiert, ohne an irgendetwas zu denken.
require 'serverspec'
set :backend, :exec
def home_path
home_path = `echo ~/`
home_path.chomp
end
def homebrew_prefix
prefix = `brew --prefix`
prefix.chomp
end
def homebrew_cellar
cellar_path = `brew --cellar`
cellar_path.chomp
end
Abschlussbenachrichtigung durch das Callback-Plug-In von Ansible
- Da es einige Zeit dauert, Ansible auszuführen, werde ich Sie benachrichtigen, wenn es fertig ist.
- Mit dem [Callbacks Plugin] von Ansible (http://docs.ansible.com/developing_plugins.html#callbacks) wird es jetzt im OS X Notification Center angezeigt.
Unterstützung für Travis Build-Zeitlimit
Travis wird den Build unter den folgenden Bedingungen zwangsweise beenden.
- Wird zwangsweise beendet, wenn der Aufbau länger als 50 Minuten dauert
- Es wird zwangsweise beendet, auch wenn für einen bestimmten Zeitraum keine Standardausgabe vorhanden ist.
- http://docs.travis-ci.com/user/build-configuration/#Job-Timeouts
Derzeit überspringt Travis Elemente, deren Installation lange dauert.
- Bereiten Sie eine Umgebungsvariable mit dem Namen TRAVIS_BUILD_SKIP vor
- [Überprüfen Sie diese Umgebungsvariable in Rolle / Spezifikation und führen Sie sie nicht aus](https://github.com/tell-k/blister-pack-mine/blob/master/roles/people/tell_k/tasks /homebrew.yml#L68-L72)
――Das Gefühl, umzufallen, ist erstaunlich. Suchen Sie nach einer besseren Methode.
fusseliger Scheck
--Ansible hat standardmäßig die Option --syntax-check
Private Builds verwalten
- Zum Beispiel wird die Rollen- / Spezifikationsgruppe eines privaten Projekts unter dem Verzeichnis "privat" auf gitignore gesetzt.
- Bereiten Sie YAML (private.yml) für den privaten Gebrauch und [Merge] playbook.yml und private.yml jedes Mal vor, wenn Sie ansible ausführen (https://github.com/tell-k/blister-pack-mine/). Blob / Master / Makefile # L9-L11).
Handhabung des Github-Repository
--Privatschlüssel erforderlich, um das Github-Repository über SSH mit dem Git-Modul von ansible auf Travis CI zu klonen
Beispiel:Das Repo des Git-Moduls ist eine URL, die mit https beginnt.
- name: Git clone tell-k/sphinxjp.themes.basicstrap
git: repo=https://github.com/tell-k/sphinxjp.themes.basicstrap.git dest=~/Work/python/sphinxjp.themes.basicstrap update=no
Beiseite
- Ich habe es mit der gleichen Konfiguration etwa ein halbes Jahr lang versucht, mit Ausnahme von Travis CI, aber es gab keine größeren Probleme. Ansible Great.
- Das Überprüfen mit Serverspec + Travis ist relativ sicher. Das Schreiben von Tests mit Serverspec macht Spaß.
――Da einige von ihnen aufgrund von Lizenzproblemen über den App Store gekauft werden, scheint es schwierig zu sein, sie vollständig zu automatisieren.
――Ich habe eine Geschichte über jede Person / jedes Projekt geschrieben, aber da es ein Boccia ist, habe ich sie nie mit jemand anderem als mir selbst geteilt oder verwendet.
- Der seltsame Name Blister-Pack wurde in Boxens TOP-Bild gefunden.
Alternative
Es gibt verschiedene andere Ideen / Tools zum Erstellen einer Mac OS X-Umgebung mit Ansible.
Anfangs habe ich versucht, diese Tools zu verwenden, aber aus folgenden Gründen aufgehört.
――Es schien mühsam zu sein, etwas Spezielles für andere Tools als Ansible zu lernen.
- Es gibt einen Wrapper-Befehl wie Boxen, aber der Plug-In-Mechanismus von Ansible scheint als Ersatz zu funktionieren.
- Wenn es nur ein Wrapper als Abkürzung war, war Makefile genug.
Referenz
Bücher
Ansible verwandt
Boxen verwandt
Homebrew-Fass verwandt
Serverspezifiziert