Internal Tech

DevOps in der Schweiz

26. Apr 2016

Wir sind hocherfreut, dass das Thema DevOps in den letzten Monaten auch in der Schweiz an Bedeutung gewonnen hat.
“DevOps ist zentral für die digitale Zukunft von SIX”. Die Kernessenz dieser Headline, nämlich digitale Projekte mit der richtigen Geschwindigkeit und Qualität zu realisieren, lässt sich nur durch das Zusammenbringen und bereichsübergreifender Kommunikation zwischen Business, Dev (Entwicklung) und Ops (Betrieb) erfolgreich umsetzen. Sowohl bei VSHN wie auch bei SIX schliessen sich DevOps und zertifizierte Sicherheit im Finanzumfeld überhaupt nicht aus. Wir sind stolz darauf, SIX Payment Services zu unseren Referenzkunden zählen zu dürfen.

Patrick Stampfli (ELCA) schreibt in seinem Gastbeitrag “In the Code: Alle lieben DevOps – oder?” über die Herausforderungen bei der Umstellung vom traditionellen “Design-Build-Run-Zyklus” zur kontinuierlichen “On-Air-Software”. “Eine wirkliche End-to-End-Agilität in der Softwareentwicklung” ist erst dann möglich, wenn neben der Anpassung der Planungs- und Entscheidungsprozesse hin zur Agilität auch die Automatisierung der technischen Prozesse (die “Voraussetzungen für DevOps”) erfolgt ist.
Wie die Einführung in einem grossen Unternehmen geschehen kann, beschreibt netzwoche.ch in “A Virtual DevOps Journey”. Eine etwas kürzere Schritt-für-Schritt-Anleitung bietet computerworld.ch in “Erfolgsrezept DevOps in vier Schritten einführen”.
Auch Umfragen belegen, dass das Thema DevOps bei den Entscheidern in Schweizer Unternehmen konkret wird:

  • 77% geben an, DevOps machen zu wollen, weil sie Software für mehrere verschiedenen Plattformen betreiben müssen und sie darum Automation benötigen.
  • 31% geben Applikationen für Mobilgeräte als treibende Kraft an.
  • 30% nennen die steigende Komplexität der Infrastrukturen (physisch, virtuell, Cloud) als Motivation, die Prozesse zu automatisieren um unabhängig(er) von der Infrastruktur zu werden.
  • Für 27% ist die Steigerung der Qualität und Geschwindigkeit wichtig.

Selbstverständlich sieht auch Google das steigende Interesse nach DevOps aus der Schweiz.
So freuen wir uns umso mehr, erfolgreich in diesem aufstrebenden Markt unterwegs zu sein.

Aarno Aukia

Aarno is Co-Founder of VSHN AG and provides technical enthusiasm as a Service as CTO.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Internal Tech

Puzzle ITC und VSHN lancieren APPUiO – die Schweizer Enterprise PaaS

1. Mar 2016

Der Open Source Dienstleister Puzzle ITC und die DevOps Company VSHN AG kombinieren ihre Stärken und lancieren gemeinsam die Schweizer Enterprise PaaS “APPUiO“.
APPUiO basiert auf der “next generation PaaS” OpenShift Enterprise V3 von Red Hat. Auf bewährten Open Source Projekten wie Docker und Kubernetes (more…)

Aarno Aukia

Aarno is Co-Founder of VSHN AG and provides technical enthusiasm as a Service as CTO.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
General Tech

What is DevOps – what does VSHN do?

16. Feb 2016

DevOps is a common term, but unfortunately as vague as “Cloud”: everyone knows that they want or need it and yet it is not something you can simply order and get delivered.
By DevOps we mean the interdisciplinary cooperation between developers and operators of software in order to deploy the applications quickly and systematically.

Similar to agile software development (e.g. Scrum) – where the “product owner” specifies the next development steps together with the software developers and takes over finished work – this promotes communication between the parties involved and reduces misunderstandings and thus expensive errors.
The promotion of cooperation between developers and operators contrasts with the previous practice of strictly separating these teams – whether for reasons of separation of powers (no access by developers to production data) or because developers and operators had to fulfill different requirement profiles (programming skills, on-call service).
In the meantime, however, a number of findings and proven methods from software development have also arrived in the operating processes:

  1. Infrastructure as Code: the description and configuration of infrastructure components using scripts to quickly and reliably automate recurring tasks (e.g. installation of a server or installation/upgrade of an application). Depending on the application and environment, there are different tools – Docker, Ansible, Puppet, SaltStack, etc. – which already have their own frameworks and ecosystems with ready-made building blocks for standard components.
  2. Test systems: if the setup of a server is completely automated, this minimizes the effort to create one or more test servers. If developers can use a test server that is the same as a production server, they can find errors before they occur in production.
  3. Versioning: if the infrastructure or at least parts of it are mapped in code, it can be managed with well-known code versioning tools (Git, SVN, etc.). This makes it possible to track changes to the infrastructure (“Who changed what when?”, “Why does it suddenly no longer work even though the software hasn’t been changed?”) and to roll back changes completely in case an error should occur.
  4. Continuous integration of the infrastructure code: just as the actual application is compiled automatically with each change and tested functionally both component by component and as a whole, the requirements for the infrastructure can also be verified with automated tests. The effects are minimized by detecting an error as early as possible. For example, publishing changes can be blocked if errors occur during testing.

Conversely, experience gained during operation also flows into modern software architectures:

  1. Packaging and version management: to ensure that all persons involved speak of the same version of the software throughout the entire quality assurance process from test / development server, acceptance by the product owner, possible external testing / validation (beta, user, UX tests), integration with external interfaces (backends, APIs) to production, the software is stored in a versioned package. The type of packaging can be determined by the development environment (e.g. JAR for Java, WAR for Tomcat) or operating environment (e.g. DEB/RPM for Linux, MSI for Windows), or it can also be independent in the case of Docker. This ensures that the software can be installed and updated completely (with all required libraries) and automates these steps as far as possible.
  2. Service Oriented Architectures (SOA) and Microservices: as soon as an application becomes so extensive and/or complex in development that more than a handful of teams take care of it, it is easier to divide the teams into smaller sub-projects (“microservices”) and explicitly define the interfaces between them than to coordinate all teams with each other in the same “project” regarding technology, development progress and internal responsibilities. This not only allows the teams to develop in a decoupled way, but also allows them to choose more suitable technologies for their purpose – provided that the interface to other teams does not change. Ideally, most components / services would be fault-tolerant with each other, i.e. if a sub-component with limited functionality fails, they would continue to function, making the overall project more robust.
  3. Configuration Management: most applications have interfaces to other applications – for example to a database or other APIs / services – and write log files. During development, quality assurance testing and production, different endpoints (addresses, credentials, etc.) are used. This allows the isolation of test and production data, so a test of a new version cannot accidentally delete the production customer data. This is why the access data is not managed directly in the code, but in configuration files, which in turn can be generated automatically for each environment or read from environment variables. A modern definition for this is, for example, the twelve-factor method (http://12factor.net/de/).
  4. Scalability: applications and services that have clearly defined interfaces can easily be scaled horizontally, i.e. distributed across different servers. This enables the company to offer the service multiple times, redundantly and thus highly available and to react to different loads by adding or removing servers. Even these steps can be automated: It is possible to automatically obtain or release more server resources based on the current load and, depending on the billing model of the individual resources, to produce costs only if the service is also used effectively.

What does the fusion of development methods and operating processes bring in concrete terms?

  1. The automation of the infrastructure (see “Infrastructure as Code” above) makes the infrastructure faster, more reliable and prevents inconsistencies due to (missing) manual steps on different systems. It enables developers and product owners to effectively test their results under the same conditions as production.
  2. Automating the software lifecycle from development to production makes the whole process faster, more reliable, and can best be done by the product owner himself after the release of the latest version. Thus, after the developers, the operators also give the business the reins for the application into their own hands and are available for further developments. The product owner can thus determine both the scope and the frequency of the deployments. The more frequently a product is rolled out, which means that the scope of the respective changes is smaller, the smaller is the risk of undesirable side effects and errors. If errors nevertheless occur, the product owner himself can reverse the last change and call on the developers to remedy the situation without penalizing the company.
  3. Both together prevent IT from blocking the critical path of the project as an end in itself and enable the developers and the business to “self-service”. Of course, this also means a cultural change within a company: if a deployment fails or problems occur in production, then developers and business people have to solve the problem together and make sure that it does not happen again (e.g. by means of automatic testing). It doesn’t matter why or because of whom the problem occurred: no “culprit” has to be found, but the whole process has to be continuously improved.

We at VSHN do nothing all day long but automate different development processes, different technologies, different backends (databases, cache servers, proxies, WAFs, etc.) and operate them according to the requirements of our customers and / or development partners on any infrastructure – be it public clouds such as Amazon, Azure, Cloudscale.ch, Cloudsigma, Exoscale.ch, Safe Swiss Cloud, Swisscom Cloud or private, i.e. company-internal infrastructures on a VMware or Hyper-V basis.
We advise our customers on the location of data storage (CH, EU, international), will soon be ISO27001-certified ourselves and, together with our partners, can offer hosting in accordance with the FINMA standard.
Our core values are trustworthiness and availability of professional competence. Trustworthiness and security through transparency: transparent communication of processes, transparent order definitions and billing models. We work agilely with our clients and communicate regularly. We are available 24×7 around the clock and proactively take care of “our” applications.
We are VSHNeers.

Markus Speth

Marketing, Communications, People

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Tech

Puppet Development Workflow mit Vagrant

8. Jan 2016

Wir von VSHN wollen unsere Kunden bei einem sauberen Lifecycle Management ihrer Software unterstützen. Dafür stellen wir ihnen mit Hilfe von Puppet mehrere Umgebungen zur Verfügung. Dies kann mit einer Testmaschine für die Entwickler beginnen, (more…)

matthias.indermuehle

Matthias is co-founder of VSHN AG, member of the executive board, and partner

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Tech

crmngr – Puppet Control Repository Manager

23. Dec 2015

Unser Weihnachtsgeschenk an die Open Source Community: Wir veröffentlichen unser Tool “crmngr” (Control Repository Manager) auf Github unter der BSD-3-Clause Lizenz: https://github.com/vshn/crmngr.

Dieses Tool hilft uns, die vielen Puppet Environments zu verwalten, welche bei uns durch r10k gesteuert werden. Es bietet zwei Hauptfunktionen: Reporting und Updates.
Mit der Report-Funktion bekommen wir einen Überblick darüber, welche Puppetmodule in welcher Version in welchem Puppet-Environment verwendet werden. Ausserdem wird auf den ersten Blick ersichtlich, ob ein Puppetmodul veraltet ist und eine neuere Version zur Verfügung steht – sei das auf Puppet Forge oder zum Beispiel in einem Git Repository.
Die Update-Funktion erlaubt es, Module in Puppet-Environments auf einen neueren Stand zu bringen, ein neues Modul hinzuzufügen oder ein Modul zu entfernen. Des Weiteren ist es möglich, über mehrere Environments hinweg Module zu aktualisieren oder andere Veränderungen vorzunehmen.
Im Kern arbeitet “crmngr” direkt mit dem r10k Control Git Repository. Es analysiert die Branches und die Puppetfiles innerhalb der Branches des Git Repositorys. Es ist keine manuelle Interaktion mit dem Repository mehr notwendig, “crmngr” kümmert sich um alles (git pull, git commit, git push, etc).
Slides vom Puppet Meetup in Zürich, welche “crmngr” vorstellen, sind auf Speakerdeck zu finden. Die Dokumentation zur Installation und Verwendung des Tools ist im READMEabgelegt.
Wir freuen uns über jedes Feedback und jede Contribution zu “crmngr”.

Tobias Brunner

Tobias Brunner is working since over 20 years in IT and more than 15 years with Internet technology. New technology has to be tried and written about.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Tech

Automatisierte Backups mit Bareos und Puppet

10. Dec 2015

Backups sind vielfach ein essentieller Bestandteil von Computersystemen. Sie dürfen nicht vernachlässigt werden. Da unsere Server und die der Kunden mit Puppet aufgesetzt und konfiguriert sind,
(more…)

Nicolas Bigler

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Tech

Experiment mit OpenShift Origin und Drupal 8

23. Nov 2015

Letzten Donnerstag wurde nach mehreren Jahren Entwicklung die PHP Plattform Drupal 8 freigegeben. Dies nahmen wir zum Anlass, zusammen mit OpenShift Origin ein Experiment zu machen: Was braucht es, um mit einfachsten Mitteln Drupal 8 auf OpenShift Origin zum Laufen zu kriegen?

Aber was ist OpenShift Origin überhaupt? Es handelt sich dabei um eine offene Platform-as-a-Service Umgebung von RedHat, welche auf Docker und Kubernetes aufbaut. Origin ist der Name für die OpenSource Version. Die von RedHat kommerziell vertriebene Plattform nennt sich OpenShift Enterprise (kurz: OSE).
OpenShift ermöglicht es, mit wenig Aufwand für den Entwickler seine Applikation zu deployen und zu betreiben. Die PaaS-Lösung nimmt dem Entwickler dabei Aufgaben wie das Bauen (z.B. kompilieren) und Deployen ab.
Nach einigem Tüfteln ist es uns mit dem folgenden einfachen Befehl gelungen, Drupal 8 in einer Basiskonfiguration auf OpenShift Origin laufen zu lassen:

oc new-app php~https://github.com/tobru/drupal-openshift.git#openshift mysql --group=php+mysql -e MYSQL_USER=drupal -e MYSQL_PASSWORD=drupalPW -e MYSQL_DATABASE=drupal

Auf den ersten Blick sieht dieser Befehl abschreckend aus, nimmt man ihn aber in seine einzelnen Bestandteile auseinander, macht er mehr Sinn:

  • oc new-app: oc ist der Name des OpenShift Commandline Clients und new-app der Befehl um eine neue App zu deployen.
  • php~https://github.com/tobru/drupal-openshift.git#openshift: Der String vor dem Tilde Zeichen gibt den Basis Docker Container an, um die Applikation mit S2I (Source to image) zu bauen. Danach kommt der Pfad zum Git Repository und mit dem Hash Zeichen wird die Referenz (z.B. Branch) angegeben.
  • mysql: Hier wird ein weiterer Docker Container hinzugefügt. In diesem Fall ein MySQL Container.
  • –group=php+mysql: Gruppiert diese beiden Container zu einem Pod.
  • -e: Definiert Umgebungsvariablen, welche bei der Ausführung der Container zur Verfügung stehen.

Beim ersten Zugriff auf die Applikation startet der Drupal Installationsassistent. Anschliessend kann Drupal ganz normal verwendet werden.
Die Schwierigkeit bei diesem Experiment war, die richtigen Parameter zu finden und Drupal zur Zusammenarbeit zu bewegen. Unter anderem musste ein settings.php erstellt werden, da dies von Drupal verlangt wird. Auch musste im settings.php eine PHP-Einstellung angepasst werden.
Die hier vorgestellte Möglichkeit, Drupal 8 unter OpenShift zu betreiben, stellt nur einen Proof-of-Concept Status dar. Will man dies produktiv betreiben, gibt es noch einiges an Arbeit zu erledigen. Gerne unterstützen wir sie dabei.

Tobias Brunner

Tobias Brunner is working since over 20 years in IT and more than 15 years with Internet technology. New technology has to be tried and written about.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Tech

Open-Source Software mit GitHub weiterentwickeln

17. Nov 2015

Was ist Open-Source Software?
Open-Source Software verbinden viele mit Software, die für alle möglichen Zwecke heruntergeladen und gratis benutzt werden kann. Open-Source Software ist jedoch viel mehr als das. Für mich steht vor allem der transparente und gemeinschaftliche Ansatz der Softwareentwicklung im Zentrum. Es geht darum, als Community gemeinsam Probleme zu lösen und vom gegenseitigen Know-how zu profitieren. Das Ergebnis wird dann unter einer freien Lizenz der Allgemeinheit zur Verfügung gestellt. Daran geknüpft ist immer die Hoffnung, dass die Nutzer eines solchen Softwareprojekts sich auch aktiv an diesem beteiligen. Gerade in meinem beruflichen Umfeld rund um DevOps, System- und Netzwerkadministration, gibt es viele Leute, die täglich mit Open-Source Software arbeiten. Sie passen die Software für Ihre Zwecke an, korrigieren kleinere oder grössere Unzulänglichkeiten oder erweitern deren Funktionsumfang mit interessanten Features. Leider finden diese lokalen Änderungen aber nicht immer ihren Weg zurück zu den ursprünglichen Autoren.
Wieso fliessen lokale Anpassungen nicht zurück zu den entsprechenden Projekten?
Ich sehe für das Problem vor allem folgende Ursachen:

  • Mein Code ist für das Projekt nicht von Interesse. In der Regel schreibt man ja eigenen Code weil man damit ein Problem lösen will. Dass ich wirklich der Einzige mit dem Problem bin ist dann doch eher unwahrscheinlich. Natürlich kann es sein, das meine Änderungen nicht den Anforderungen oder dem abgesteckten Funktionsumfang eines Projekts entsprechen. Ich habe jedoch bisher nicht erlebt, dass Änderungen komplett abgelehnt werden. Dass mal die eine oder andere Anpassung gefordert wird, ist hingegen durchaus üblich und hilft in der Regel, die Qualität des eigenen Codes zu verbessern.
  • Mein Code ist nicht gut genug. Oft gehört, auch bei uns in der Firma. Der Code entspricht nicht den eigenen Anforderungen an Qualität, Stil etc. Man will sich damit nicht blamieren. Es gibt natürlich Code, der im Rahmen von Projekten entsteht, der nicht über alle Zweifel erhaben ist. In der Regel ist der Zeitaufwand, den Code auf ein akzeptables Niveau zu bringen jedoch überschaubar und in Hinblick auf die Wartbarkeit der Software auch gut investierte Zeit.
  • Mir fehlt die Zeit. Meist eine Ausrede; oft zumindest nicht zu Ende gedacht. Früher oder später muss ich meinen lokalen Code aktualisieren, meist dann, wenn im ursprünglichen Projekt neue Funktionen hinzukommen oder mehr oder weniger kritische Fehler beseitigt wurden. Wenn ich mir von Anfang an die Zeit nehme, meinen Code zurückzuführen, wird dieser automatisch von der Community mitgepflegt. Ich spare also unter dem Strich Zeit.
  • Ich weiss nicht so recht wie das mit Git, GitHub, Issues und Pull Requests funktioniert. Viele Projekte setzen mittlerweile auf GitHub als zentrale Entwicklungs- und Kollaborationsplattform. Daher müssen wir uns zwangsweise mit den Abläufen vertraut machen, wenn wir uns in die Entwicklung einbringen möchten. Dazu möchte ich im weiteren Verlauf dieses Blogposts ein kurze Einführung geben.

How do I GitHub?
GitHub ist eine webbasierte Softwareentwicklungs- und Kollaborationsplatform, die von vielen Open-Source Projekten als zentrale Anlaufstelle für Nutzer und Entwickler eingesetzt wird. Die Platform unterstützt bei:

  • Verteilung der Software; Basis hierzu ist das Versionskontrollsystem Git.
  • Verwaltung von Feature Requests und Bug Reports
  • Soziale Netzwerk-Komponenten wie das Folgen von Projekten.

GitHub setzt auch ganz gezielt auf möglichst einfache Kollaboration.
Issues
Wenn man ein Fehlverhalten (Bug Report) der Software festgestellt hat oder sich eine neue Funktion (Feature Request) wünscht, bietet es sich an, dafür ein Issue zu eröffnen. Vor allem wenn man noch keine Lösung bereit hat. Bei Bug Reports ist es immer wichtig, möglichst viele Informationen zum Nachvollzug des Fehlverhaltens zur Verfügung zu stellen. Dazu gehört die Version der eingesetzten Komponenten, welche Aktionen zum Fehlverhalten führten (Shell Kommandos, Screenshots / Screencasts, Schritt-für-Schritt Anleitungen) sowie Auszüge von relevanten Logdateien. Oft wird erwartet, dass das Fehlverhalten mit der aktuellsten Version der Software getestet wird.
Forks / Pull-Requests
Möchte man einen Schritt weitergehen und selber Code, Dokumentation oder allfällige Übersetzungen beisteuern, macht man sich eine lokale Kopie des entsprechenden Projekts. In der GitHub-Terminologie ist dies ein Fork und den erstellt man mit einem Klick auf die entsprechende Schaltfläche oben rechts. Diese Kopie ist ein vollwertiges Git Repository, auf dem wir uneingeschränkt arbeiten können. Es empfiehlt sich, den master branch nicht für die aktive Entwicklung zu benutzen, sondern für die einzelnen Features und Bugfixes eigene Branches zu erstellen. Dies erleichtert später das Nachführen von Änderungen des Upstream-Repositories, also des Projekts, von dem wir ursprünglich den Fork gezogen haben. Auf unserem Feature oder Bugfix Branch können wir nun entwickeln, und sobald wir mit dem Ergebnis oder dem Fortschritt zufrieden sind, ein sogenannten Pull-Request erstellen. Damit bitten wir sozusagen die Autoren des Upstream-Repositories unsere Änderungen einzupflegen.
Ein GitHub Workflow-Beispiel
Ich habe ein interessantes Projekt auf GitHub entdeckt: https://github.com/vshn/tikapy-icinga, gemäss Beschreibung eine Sammlung von Nagios/Icinga Plug-ins zur Überwachung von Mikrotik-Geräten. Mein Wunsch: Ich möchte die Anzahl der aktuell verbundenen WLAN Clients auslesen. Leider fehlt das Plugin mit entsprechender Funktionalität, sodass ich mich entscheide, dieses selber beizusteuern. Ich mache also einen Fork des Projekts.
Nach einem Klick auf die entsprechende Schaltfläche und ein paar Sekunden Geduld habe ich nun meine Kopie des Projekts. Davon ziehe ich nun lokal eine Kopie.

$ git clone git@github.com:andrekeller/tikapy-icinga.git

Zusätzlich erstelle ich einen Feature Branch für meine geplanten Änderungen.

$ cd tikapy-icinga
$ git checkout -b feature_wlan_clients
Switched to a new branch 'feature_wlan_clients'

Als nächstes schreibe ich den entsprechenden Code in die Datei check_tikapy_wlan_clients.py. Sobald ich damit fertig bin, checke ich die Änderungen ein (Git Commit) und pushe diese auf mein Repository (Git Push):

$ git add check_tikapy_wlan_clients.py
$ git commit -m 'Add new script to check clients connected to a specific WLAN.' check_tikapy_wlan_clients.py
$ git push origin feature_wlan_clients

Wenn es sich um eine grössere Änderung handelt, ist es normal, dass sich hier der eine oder andere Commit ansammelt. Sobald man das Gefühl hat, die Änderung ist soweit, dass man dafür einen Pull-Request öffnen kann, empfiehlt es sich, den Branch zu rebasen. Upstream-Projekte sehen es oft nicht gerne, wenn zusammengehörende Änderungen auf mehrere Commits verteilt sind, da alle Commits beim Akzeptieren des Merge-Requests in das Upstream-Projekt übertragen werden und die History entsprechend unübersichtlich machen können.
Also schauen wir rasch in das Git Log bevor wir den Pull-Request erstellen:

$ git log --pretty=oneline --abbrev-commit
2c10f7b Fix bug about foobar...
1750568 Add some more functionality...
ff7d064 Add new script to check clients connected to a specific WLAN.
665a71e Support lookup by name instead of ip.
30c7787 Package release 0.1.1.
...

In diesem Fall gehören die obersten drei Commits zu unserer Änderung, daher rebasen wir diese in einen einzigen Commit:

$ git rebase -i 665a71e

Dies öffnet einen Editor:

Den ersten Commit übernehmen wir, möchten dazu aber noch einen ausführlichere Commit Message schreiben. Dazu markieren wir den Commit mit reword. Die beiden anderen beiden Commits integrieren wir in den ersten, die Commit Messages brauchen wir nicht. Wir markieren die beiden Commits also mit fixup:

Sobald wir die Datei speichern und den Editor schliessen, öffnet sich der Editor erneut und gibt uns die Möglichkeit, die Commit Message anzupassen:

Danach schauen wir nochmals in das Commit Log.

$ git log --pretty=oneline --abbrev-commit
7aed10a Feature: Add new script to check clients connected to a specific WLAN.
665a71e Support lookup by name instead of ip.
30c7787 Package release 0.1.1.

Hat geklappt, wir haben nun einen einzigen Commit. Da wir die History unseres Branches damit geändert haben, müssen wir nun einen Force Push machen. Force Pushs sollten nur auf einem Feature Branch gemacht werden, niemals auf dem Master!

$ git push -f origin feature_wlan_clients

Der nächste Schritt ist nun, ein Pull-Request zu erstellen. Dafür gehen wir zurück zu unserem Fork auf GitHub.

Wie auf dem Screenshot zu sehen ist, hat GitHub gemerkt, dass wir eine Änderung auf einen Branch gepusht haben und bietet uns sogleich an einen Pull-Request zu erstellen:

GitHub übernimmt hier automatisch die Message aus dem Commit. Wir können den Request also unverändert mit einem Klick auf Create Pull Request absetzen. Nun heisst es warten, bis die Autoren des Upstream Projekts reagieren. Das kann mitunter ein paar Tage dauern. Leider kommt es auch vor, dass Projekte einfach aufgegeben werden und gar keine Antwort zurückkommt. Erkennen kann man das auch daran, dass bereits diverse unbearbeitete Pull-Requests für das Projekt vorhanden sind. Es lohnt sich also, vorher rasch zu prüfen, wie es um ein Projekt steht.
Weiter kommt es natürlich vor, dass man einen entsprechenden Kommentar erhält, mit der Bitte, noch kleinere oder grössere Anpassungen zu machen. In dem Fall machen wir die Änderungen in unserem Branch, committen, rebasen und pushen diese. Der Pull-Request wird bei jedem Push auf den Branch automatisch aktualisiert. Im Idealfall wird dann die Änderung nach der einen oder anderen Iteration gemerged: Das heisst, die Commits werden in das Upstream-Repository eingepflegt und der Pull-Request wird damit automatisch geschlossen. Wir kriegen eine entsprechende Benachrichtigung und wenn wir uns den geschlossenen Pull-Request noch einmal anschauen, sehen wir:

Das bedeutet, unsere Änderungen sind nun Teil vom Upstream Projekt. Yay!
Haben wir Lust auf das nächste Feature, aktualisieren wir unseren Fork und legen für das nächste Feature einen Branch an. Den alten Feature Branch brauchen wir nicht mehr, es bietet sich also an, diesen zu entfernen.

# zurückwechseln zu master branch
$ git checkout master
# upstream änderungen abholen (URL vom Upstream Projekt, nicht unserem Fork!)
$ git remote add upstream git@github.com:vshn/tikapy-icinga.git
$ git fetch upstream
# upstream änderungen einpflegen
$ git rebase -p upstream/master
# lokalen wlan clients feature branch löschen
$ git branch -d feature_wlan_clients
# remote wlan clients feature branch löschen
$ git push origin :feature_wlan_clients
# neuen feature branch erstellen
$ git checkout -b feature_new_feature

Forks in denen keine offenen Pull-Requests oder andere lokale Änderungen pendent sind, sollte man via GitHub-Webseite löschen. Damit trägt man zu mehr Übersicht, zum Beispiel in den Suchergebnissen, bei. Will man später noch weitere Änderungen vornehmen, kann man jederzeit einen neuen Fork ziehen.
Fazit
Wenn man sich initial ein bisschen Zeit nimmt und sich mit Git und GitHub etwas auseinandersetzt, sind die Hürden, an einem Open-Source Projekt mitzuarbeiten, schnell überwunden. Somit steht einem nichts mehr im Weg, die eigenen Ideen zu verwirklichen und mit der Open-Source Community zu teilen.

andre.keller

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us