GitLab CI/CD bietet eine flexible Möglichkeit, Variablen und Secrets in Pipelines zu verwenden, um Konfigurationen, Zugangsdaten oder andere sensible Informationen sicher und dynamisch zu verwalten. Variablen und Secrets sind entscheidend für die Konfiguration von Umgebungen und die sichere Handhabung sensibler Daten in Pipelines, ohne dass diese direkt im Quellcode hinterlegt werden müssen.
GitLab CI verwendet mehrere Typen von Variablen, die je nach Bedarf in Pipelines definiert und verwendet werden können:
Benutzerdefinierte Variablen: Diese werden vom
Benutzer festgelegt und enthalten projekt- oder umgebungsspezifische
Informationen, wie API-Schlüssel, Datenbankverbindungen oder
Build-Flags. Sie können auf Projekt-, Gruppen- oder Instanzebene
definiert werden und in der .gitlab-ci.yml
-Datei, über die
Benutzeroberfläche oder per API festgelegt werden.
Beispiel:
variables:
DATABASE_URL: "postgres://user:password@localhost:5432/db"
Vordefinierte Variablen: GitLab stellt automatisch eine Vielzahl an vordefinierten Variablen bereit, die Informationen über den aktuellen Job, die Pipeline und die Umgebung enthalten. Sie sind nützlich, um dynamisch auf den Zustand der Pipeline zuzugreifen.
Beispiele für vordefinierte Variablen:
$CI_COMMIT_BRANCH
: Der Name des aktuellen
Branches.$CI_PIPELINE_ID
: Die eindeutige ID der Pipeline.Geheime Variablen (Secrets): Diese Variablen enthalten sensible Informationen wie API-Schlüssel, Tokens oder Passwörter, die in Jobs verwendet werden können, jedoch nicht im Klartext sichtbar sind. Sie werden oft als geschützte und maskierte Variablen gespeichert, um sie vor unberechtigtem Zugriff zu schützen.
Beispiel für eine geheime Variable:
deploy-job:
script:
- curl -H "Authorization: Bearer $SECRET_API_KEY" https://api.example.com/deploy
Variablen in GitLab können auf verschiedenen Ebenen definiert werden: - Projekt: Variablen gelten für das gesamte Projekt. - Gruppe: Variablen gelten für alle Projekte einer Gruppe. - Pipeline: Variablen, die für eine spezifische Pipeline definiert sind, können auf einzelne Jobs oder Stages beschränkt werden.
Geschützte Variablen: Diese Variablen sind nur in geschützten Branches oder Tags verfügbar. Dadurch wird sichergestellt, dass sensible Daten nur bei vertrauenswürdigen Deployments verwendet werden.
Maskierte Variablen: Maskierte Variablen verhindern, dass ihre Werte im Job-Log sichtbar sind. Dies ist besonders wichtig, wenn es um die Verarbeitung sensibler Daten wie Passwörter oder API-Schlüssel geht.
Beispiel:
variables:
SECRET_API_KEY: "mySecretKey"
Variablen können direkt in Job-Skripten referenziert werden und
werden durch das Präfix $
aufgerufen.
Beispiel:
deploy-job:
script:
- echo "Deploying to $CI_ENVIRONMENT_URL"
In diesem Beispiel wird die vordefinierte Variable
$CI_ENVIRONMENT_URL
verwendet, um die URL der Zielumgebung
während des Deployments anzuzeigen.
GitLab CI unterstützt auch die dynamische Generierung von Variablen während der Pipeline-Ausführung. Durch die Verwendung von Skripten oder externen Tools können Variablen basierend auf den Bedingungen der aktuellen Pipeline erstellt werden.
Beispiel:
generate-variable:
script:
- export DYNAMIC_VAR=$(date +%Y%m%d)
- echo "Generated variable: $DYNAMIC_VAR"
Für größere Projekte oder sicherheitskritische Anwendungen können externe Secrets-Management-Tools wie HashiCorp Vault oder AWS Secrets Manager in GitLab CI integriert werden. Diese Tools bieten zusätzliche Funktionen zur Verwaltung, Rotation und Auditierung von Secrets und ermöglichen die nahtlose Integration in Pipelines.
Beispiel für die Integration eines externen Geheimdienstes:
deploy_job:
script:
- export DB_PASSWORD=$(vault kv get -field=password secret/db)
- ./deploy.sh
Die sichere Verwaltung von Variablen und Secrets ist entscheidend, um Sicherheitsrisiken in CI/CD-Pipelines zu minimieren:
Weitere Informationen zur sicheren Verwendung von Variablen und Secrets finden sich in der offiziellen GitLab-Dokumentation.