Wie man effektiv eine Site mit Drush make verwaltet?

16

Welche Dinge sind bei der Verwaltung einer Site mit Drush make zu beachten ?

Letharion
quelle

Antworten:

29

"Dateien erstellen" definiert im Kontext von Drush und Drupal eine Reihe von Modulen, Themen und Bibliotheken, aus denen eine Site besteht. Während man das gesamte sites / all / modules-Verzeichnis in git ablegen könnte, ist die make-Datei sowohl für git als auch für die Entwickler viel schneller zu handhaben. Unten ist eine Make-Datei von einem aktuellen Projekt von mir. Ich habe viel ausgeschnitten, da die gesamte Datei Hunderte von Zeilen umfasst, aber ich habe genug beibehalten, um alle von mir verwendeten Funktionen zu zeigen.

; API
api = 2

; Core
core = 7.x
projects[drupal][version] = 7.14

; Contrib modules
projects[date][version] = 2.0-alpha4
projects[email][version] = 1.0

; Media and file_entity go hand in hand - please make sure they work together.
projects[media][version] = 2.0-unstable5
projects[file_entity][version] = 2.0-unstable5

; Cron modules
projects[ultimate_cron][version] = 1.6
projects[background_process][version] = 1.12

; Performance modules
projects[expire][version] = 1.0-alpha2
projects[cache_actions][version] = 2.0-alpha3

; Unstable modules
projects[menu_node_views][type] = module
projects[menu_node_views][download][type] = git
projects[menu_node_views][download][url] = http://git.drupal.org/project/menu_node_views.git
projects[menu_node_views][download][revision] = f46dd41eb8c4e693a6642a6c461afa57d99a6f1b

projects[filefield_sources_plupload][type] = module
projects[filefield_sources_plupload][download][type] = git
projects[filefield_sources_plupload][download][url] = http://git.drupal.org/project/filefield_sources_plupload.git
projects[filefield_sources_plupload][download][revision] = da374770b80fcbc0dab17158d38c8436ef29caca

projects[menu_token][type] = module
projects[menu_token][download][type] = git
projects[menu_token][download][url] = http://git.drupal.org/project/menu_token.git
projects[menu_token][download][revision] = 8c18fbb

; Libraries
libraries[mediaelement][download][type] = "file"
libraries[mediaelement][download][url] = "https://github.com/johndyer/mediaelement/zipball/2.7.0"

; Patches

; #1491150: node_load in menu_node_menu_link_insert is not safe - http://drupal.org/node/1491150
projects[menu_node][patch][] = http://drupal.org/files/menu_node-node_load-in-menu_node_menu_link_insert-1491150-1.patch

; Fix rendering of relation endpoints
projects[relation][patch][] = http://drupal.org/files/relation_table_endpoints_break.patch
projects[relation][patch][] = http://drupal.org/files/relation_bundle_permissions.patch

libraries[jquery-json-min][download][type] = "file"
libraries[jquery-json-min][download][url] = "http://jquery-json.googlecode.com/files/jquery.json-2.3.min.js"
libraries[jquery-json-min][download][sha1] = "2a4615b93c65dd50f92117c570121035a0327fee"
libraries[jquery-json-min][destination] = "libraries/jquery-json"

Die API-Zeile definiert, welche Drush-API für den Rest der Datei verwendet werden soll. Ein wichtiger Punkt bei der Datei ist, dass alle Module entweder eine bestimmte Version haben oder auf ein bestimmtes git commmit verweisen. Wir haben niemals -dev-Versionen in unseren Dateien. Als wir an einem Client - Sitzung oder der Hand über die Make - Datei in das zeigen Jenkins Server, muss es nie irgendwelche Überraschungen geben. Die genaue Version in der Datei sollte getestet werden und alle Arten von Tests bestehen. Dies ist wichtig, um qualitativ hochwertige Produkte liefern zu können.

In meiner Firma besteht die allgemeine Vereinbarung darin, dass jedes Team ein Shell-Skript namens "build" im Stammverzeichnis des Repositorys bereitstellt, das für die Einrichtung der Site verantwortlich ist, damit automatisierte Tests von demselben Team ausgeführt werden können CI-Setup.

Modulaktualisierungen können schnell direkt auf Sites zum Testen durchgeführt werden, jedoch offiziell, indem die make-Datei aktualisiert und die Site neu erstellt wird.

Mein Team verwendet derzeit diesen Satz von Build-Skripten . Ich arbeite daran, einen Großteil der Funktionalität in eine Drush-Erweiterung umzuwandeln, die jedoch stark von der Bereitstellung abhängt. Eine CLI-Version von Aegir, wenn Sie so wollen.

Letharion
quelle
1
Genius. Vielen Dank, dass Sie sich die Zeit genommen haben, dies aufzuschreiben. Es ist sehr hilfreich
Clive
Ja, ich stimme Clive zu und stimme als sehr nützlicher Beitrag zu. Ich bin daran interessiert, nicht wiederholt die gleichen Module und Patches installieren zu müssen. @Letharion Ich würde mich sehr freuen, wenn Sie uns eines Tages erläutern könnten, wie Sie damit vorgehen. Installieren Sie es lokal oder auf einem Remote-Server?
Artur
1
Herumspielen mit Drush machen. Ich verstehe den Grund für das Einfügen von festen Versionsnummern. Wie aktualisieren Sie sie jedoch? Gibt es eine Drush-Make-Entsprechung für Drush-Up? Irgendwann müssen Sie Ihre Versionen auf die neueste Version aktualisieren (insbesondere Sicherheitsupdates). Das mit Dutzenden von Modulen manuell machen zu müssen, scheint ziemlich mühsam ...
Berdir
1
Moar-Fragen: Haben Sie eine .gitignore-Datei oder wie vermeiden Sie das Festschreiben von "maked" -Dateien? Wenn ja, wie sieht das aus? Versucht, etwas Besonderes mit Wildcard und zu tun! Aber das funktioniert nicht für Verzeichnisse.
Berdir
1
Ich stimme nicht wirklich zu. Das Fehlen von -dev sorgt für Konsistenz, nicht umgekehrt. Es liegt in der Verantwortung jedes Entwicklers, sicherzustellen, dass der Patch angewendet wird. Dies kann bedeuten, dass statt einer stabilen Version auf eine Git-Revision verwiesen wird, jedoch niemals auf eine unvorhersehbare -Dev, die sich von Build zu Build ändern kann.
Letharion