Im letzten Artikel dieser Blogserie haben wir uns Steps und Actions eines GitHub Workflows angeschaut. In diesem Artikel geht es nun um Variablen. Diese können nicht nur dazu genutzt werden, um Informationen zentral zu setzen, sondern auch um Actions zu parametrisieren und Daten auszutauschen. Wie das genau funktioniert, schauen wir uns jetzt an.
GitHub Actions kennt zwei Typen von Variablen: Umgebungsvariablen und Output-Variablen. Beide Konzepte gibt es ebenfalls in Azure Pipelines. Während die Umgebungsvariablen direkt im Workflow gesetzt werden können, sind Output-Variablen als Ergebnis von einzelnen Actions gedacht.
Umgebungsvariablen
Umgebungsvariablen können für einen gesamten Workflow, für einzelne Jobs oder aber auch einzelne Steps gesetzt werden. Diese sind immer als Key-Value-Pairs zu betrachten, welche aus einem Namen und einem Wert bestehen (siehe Abbildung 1). Der Wert ist, wie bei Umgebungsvariablen üblich, ein einfacher Datentyp wie Text, Zahl oder Boolean. Gibt es die gleiche Umgebungsvariable auf unterschiedlichen Ebenen (Workflow, Job, Step) so wird immer die spezifischere Variable verwendet (Step Umgebungsvariable vor Job Umgebungsvariable vor Workflow Umgebungsvariable).
Der Runner übernimmt dann die gesetzten Umgebungsvariablen auf das entsprechende System. Von dort können diese bequem als Prozess-Umgebungsvariablen abgerufen werden. Die Syntax hierfür ist abhängig von der verwendeten Programmiersprache bzw. Shell (siehe Abbildung 2).
Umgebungsvariablen können zusätzlich noch direkt im Workflow referenziert werden. Das ist sinnvoll, wenn diese als Parameter an Actions übergeben werden sollen. Ein Beispiel findet sich in unserer AIT Voting Extension, bei der z.B. die Versionsnummer sowie Publisher und die Extension ID zentral gesetzt und dann an die jeweilige Action als Parameter übergeben werden (siehe Abbildung 3).
Zusätzlich zu den eigenen Variablen stellt GitHub noch Standardvariablen zur Verfügung wie das aktuelle Verzeichnis oder die Run Number. Die Standardvariablen beginnen dabei immer mit dem GITHUB_ – Präfix, welches nur für diese reserviert ist. Eigene Variablen können nicht mit dem GitHub-Präfix erstellt werden.
Wer Informationen oder Ergebnisse aus einer Action an andere Steps der gleichen Jobs weitergeben möchte, kann in einer Action per Workflow command eine Umgebungsvariable setzen (siehe Abbildung 4). Diese ist zwar in der aktuellen Action noch nicht geändert, hat aber den gesetzten Wert in allen nachfolgenden Actions im gleichen Job.
Für alle, die Informationen von einem Job zum nächsten übergeben möchten, eignen sich Output-Variablen.
Output-Variablen
Output-Variablen sind eine Möglichkeit innerhalb einer Action Ergebnisse oder Informationen als Ausgabe zu definieren. Diese können dann über Umgebungsvariablen oder als Parameter wieder in einer Action verwendet werden. Der große Vorteil bei Output-Variablen ist, dass diese von einem Job in den nächsten übergeben werden können. Dadurch können nicht nur Abhängigkeiten modelliert (z.B. beginnt der nächste Job nur, wenn der vorherige ein entsprechendes Ergebnis geliefert hat), sondern auch Informationen weitergegeben werden (siehe Abbildung 5).
Fazit
Die Handhabung von Variablen in GitHub Actions ist ähnlich zu der, die bereits aus Azure Pipelines bekannt ist. Die Vereinheitlichung von Variablen zu Umgebungsvariablen macht es einfacher, damit zu arbeiten. Andererseits gibt es viele der Features von Azure Pipelines nicht, z.B. Variablen-Gruppen, Queue-Time-Variablen oder komplexe Parameter (z.B. für Auswahllisten). Wer auf eine dieser Funktionen angewiesen ist, wird sich bei der Migration eine Alternative überlegen müssen. Der Umgang mit Variablen, die geheime Informationen wie Passwörter oder ähnliches beinhalten, wird im nächsten Blogartikel behandelt.
Sprechen Sie uns an, wenn Sie Fragen haben oder Unterstützung in Ihrem Softwareentwicklungsprozess benötigen: Von der ersten Idee über die Entwicklung mit einer Build- und Release-Pipeline bis hin zur Inbetriebnahme und Wartung. Wir führen Sie gerne ans Ziel.