Drupal Git Workflows - jneubert/doc GitHub Wiki

Beispiel ZBW Labs. S. a. Git, Drupal core and Drush Installation s. Drupal Administration

Table of Contents

Development (DEV only)

Setup Drupal Repository

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

Vendor Update Drupal Core

  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

Vendor Update Drupal Modules

  • 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

Update of a separate vendor branch (zenlabs)

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"

Merge von issue branch

  git co labs
  git merge --log --no-ff Issue_LABS-117_drupal-upgrade

Patches

Patch erstellen

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

Patch anwenden

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!!

Deployment

Deployment auf Test/QA

von DEV

  • Merge von Issue Branches
  • ggf. git rebase zur Zusammenfassung von Commits
  • zentrales Repository aktualisieren
  git push

auf QA

  • 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)

auf QALIVE

  • 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

neue Version erzeugen

  • 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

Deployment in Produktion

Maintenance mode per Drush:

  cd /opt/labs
  drush vset maintenance_mode 1

auf PROD/STAGE

  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?

auf PROD/LIVE

  • dito

Maintenance

Aktualisierte Instanz auf anderen Entwicklungsrechner übertragen

  • Ü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

Neue Instanz (z.B. QA) aufsetzen

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

Initialisierung neue DEV DB

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

mit DB-Inhalt von anderem System starten

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

Weblinks

⚠️ **GitHub.com Fallback** ⚠️