Drupal Git Workflows - jneubert/doc GitHub Wiki
Beispiel ZBW Labs. S. a. Git, Drupal core and Drush Installation s. Drupal Administration
Um nur den Branch 7.x zu tracken:
[remote "drupal"]
url = git://drupalcode.org/project/drupal.git
fetch = +refs/heads/7.x:refs/remotes/drupal/7.x
git checkout labs # um sicherzugehen, dass ich auf dem Masterbranch bin git fetch -v drupal
# Drupal-Versionstag identifizieren, z.B. "7.12" git tag
# Commit mit generierter Message erzwingen git merge --log --no-ff 7.12 -m "Issue LABS-23: Merge Drupal 7.12" drush updatedb
# Update localization drush l10n-update-refresh drush l10n-update
# zurück ins Repository git push origin labs
ggf. auch: git push --tags
- Modulupgrades idealerweise _nicht_ in einem Feature Branch, sondern in master, und dann in Feature Branch mergen.
- Überprüfen, dass der Core auf Stand ist!
- Überprüfen, dass es keine nicht commiteten Dateien gibt (Patch-Dateien ggf. sichern).
- Nach verfügbaren Upates suchen:
drush up -n
Nach geänderten Files suchen:
<strike>drush hacked-list-projects</strike> ''Funktioniert nicht mehr!''
- Module einzeln aktualisieren (insbesondere, damit DB-Fehler sofort auffallen und modulweise behoben werden können).
drush rl # installierte Version checken drush up ODER drush dl <module> # ggf. auf -dev achten drush updb
Testen (aufrufbar | fliegt die Seite auseinander | ist editieren möglich? | ggf. auch deploy!)
git add <path/to/module> git commit -m "Upgrade module xyz to 7.x-1.3" git push
Zen allows for generating sub-themes, as a starter kit, on which zenlabs is built. In order to be able to merge in changes from later versions of zen, a separate ZEN-STARTERKIT branch of the unmodified generated files is maintained.
The zen theme directory must be kept in sync in the main and the vendor branch!
Theme zen must be enabled in order to get notifications of new Zen releases.
# update vendor branch cd sites/all/themes/custom git co ZEN-STARTERKIT
# update zen on vendor branch (update of Drupal core and other modules not required!) # (as described above, including git commit)
# remove directory for a clean start rm -rf zenlabs
# recreate zenlabs from starterkit drush zen --path=sites/all/themes/custom --without-rtl "Zen Sub-theme Labs" zenlabs
# check in git add zenlabs git ci -am "New zen subtheme initialized from STARTERKIT 7.x-5.4"
# back to the main branch git co labs
# merge vendor branch without commit git merge -v --no-commit ZEN-STARTERKIT
# RESOVLE MERGE CONFLICTS
git commit -m "Merge branch ZEN-STARTERKIT 7.x-5.4 into labs"
git co labs git merge --log --no-ff Issue_LABS-117_drupal-upgrade
s. a. Making a Drupal patch with Git
- ins Moduldirectory gehen
- Datei(en) ändern
- Patch-Datei erstellen
git diff --relative > [project_name]-[short-description]-[issue-number]-[comment-number].patch
s. a. Applying patches
- ins Moduldirectory gehen
patch -p1 --verbose < path/file.patch
'Nicht' mit git apply ... versuchen - dann wird das git root Verzeichnis angenommen!!
- Merge von Issue Branches
- ggf. git rebase zur Zusammenfassung von Commits
- zentrales Repository aktualisieren
git push
- ggf. händische Sicherung mit 'backup_drupal.sh'
- Sicherstellen, dass keine Änderungen offen sind
git st
- ggf. Daten komplett neu von PROD übernehmen:
recreate_qalabs.sh
- Update aus dem Repository automatisiert:
update_drupal_inst.sh qalabs
- anhand von Jira die relevanten Issues holen und abarbeiten
- testen ...
- Issues auf resolved setzen
- keine Code- oder Konfigurationsänderung auf QA! (ggf. Zyklus von DEV aus wiederholen)
- ggf. händische Sicherung mit 'backup_drupal.sh'
- Sicherstellen, dass keine Änderungen offen sind
git st
- ggf. neu von LIVE übernehmen (wie???)
- Update aus dem Repository automatisiert
update_drupal_inst.sh qalabslive
- mindestens ein Deployment testen
- ggf. weitere Issue-spezifische Deployment Tests
- in Git taggen (auf DEV, nicht QA - dort kann es unsinnige Merges geben)
git tag -a 7.x-1.5 -m "7.x-1.5" git push origin 7.x-1.5
Maintenance mode per Drush:
cd /opt/labs drush vset maintenance_mode 1
update_drupal_inst.sh labs 7.x-1.5
Offen: pull in fetch und merge (mit Meldung) trennen. Wie Meldung zur tatsächlichen Produktivsetzung des Codes erzeugen?
- dito
- Überprüfen, dass es keine nicht commiteten Dateien gibt.
git pull # macht einen ff-merge ohne commit/log-Eintrag!
# Schema Cache löschen
drush ev "cache_clear_all('schema:', 'cache', TRUE);"
# Schemaänderungen aus der neuen Version nachziehen
drush updatedb
Postgres und PHP aktualisieren (postgresql als DB erfordert php53!)
Neue Datenbank
su - postgres createdb drupal_labs (oder ggf. drupal_qalabs) exit
Drupal-DB-User ggf. anlegen und berechtigen
su - postgres
psql
create user drupaladmin with password 'geheim';
grant all privileges on database drupal_labs to drupaladmin;
\q
exit
Verzeichnis (für qalabs)
cd /opt git clone user@server:/srv/git/labs.git qalabs # bzw. in DMZ: git clone ssh://user@server:4712/srv/git/labs.git qalabs
Link für Apache
cd /var/www/html ln -s ../../../opt/labs
Apachekonfiguration (Multiviews wird für multilingual gebraucht)
s. labs.conf
Interaktive Installation über Browser (/labs)
- oder -
Installation mit drush
cd /opt/drupaldev # settings.php wird vorausgesetzt chmod 666 sites/default/settings.php mkdir -p sites/default/files chmod 777 sites/default/files # Datenbank wird im Folgeschritt komplett gelöscht und neu aufgebaut drush site-install standard --site-name=drupaldev
Für Drupal-Development allgemein
drush -y dis overlay dashboard drush dl devel coder examples security_review hacked drush -y en simpletest devel coder coder_review drush -y updb
Spezifisch für web_taxonmy
drush dl ctools http_client web_taxonomy drush -y en ctools http_client web_taxonomy drush -y updb
Erstkonfiguration für labs
Module Locale und Features aktivieren Sprache Deutsch hinzufügen Prefix "en" für Sprache en definieren Feature labs aktivieren
System-Vorbereitung
Postgres-Port in iptables freigeben (falls das System nicht durch DMZ-Einstellungen blockiert wird)
Dateien und Verzeichnis für Drupal-Konfig
# settings.php von anderem Rechner übernehmen cd /opt/qalabs vi sites/default/settings.php # site_name und DB-Verbindung setzen chown :apache sites/default/settings.php chmod 664 sites/default/settings.php mkdir sites/default/files chown :apache sites/default/files chmod 775 sites/default/files chcon -vt httpd_sys_content_t './files' # auf SElinux-Systemen
DBTNG-Migrator Prozedur (in replicate_labs_to_demo.sh) produziert Fehler:
SQLSTATE[42703]: Undefined column: 7 ERROR: column "i18n_mode" of [error] relation "block" does not exist at character 112 SQLSTATE[42703]: Undefined column: 7 ERROR: column "l10n_status" of [error] relation "locales_target" does not exist at character 71 SQLSTATE[42703]: Undefined column: 7 ERROR: column "i18n_mode" of [error] relation "menu_custom" does not exist at character 57 SQLSTATE[42703]: Undefined column: 7 ERROR: column "language" of [error] relation "menu_links" does not exist at character 215 SQLSTATE[42703]: Undefined column: 7 ERROR: column "language" of [error] relation "taxonomy_term_data" does not exist at character 78 SQLSTATE[42703]: Undefined column: 7 ERROR: column "language" of [error] relation "taxonomy_vocabulary" does not exist at character 99
daher
- auf Quellsystem
pg_dump -U postgres drupal_labs > /tmp/drupal_labs.sql scp /tmp/drupal_labs.sql ite-srv11:/tmp
- auf Zielsystem
psql drupal_labs < /tmp/drupal_labs.sql