Automatisieren von Projektaktionen in Ihrem Git Repository
In diesem Tutorial lernen Sie, wie Sie eine Pipeline einrichten, um eine Aktualisierung in Ihrem Projekt auszulösen, wenn Konfigurationsänderungen in den Hauptzweig Ihres Repositorys zusammengeführt werden. In diesem Tutorial lernen Sie, wie Sie
häufige Aufgaben in einem Projekt automatisieren können, z. B. die Validierung einer Konfiguration, indem Sie die Pipelines und Toolchains Ihrer Wahl verwenden.
Dies ist eine experimentelle Funktion, die zu Evaluierungs- und Testzwecken zur Verfügung steht und sich ohne vorherige Ankündigung ändern kann.
Dieses Tutorial konzentriert sich auf einen einfachen Anwendungsfall, bei dem eine Konfiguration in einem Projekt aktualisiert wird, wenn Änderungen in den Hauptzweig Ihres Repositorys zusammengeführt werden, wie in der folgenden Abbildung dargestellt:
Da Pipelines und Toolchains anpassbar sind, können die Prinzipien dieses Tutorials Ihnen dabei helfen, andere gängige Aktionen innerhalb eines Projekts zu automatisieren, wie z. B. die Validierung und Bereitstellung von Konfigurationsänderungen, nachdem sie in den Hauptzweig Ihres Repositorys zusammengeführt wurden. Dieses Tutorial verwendet GitHub Aktionen und Workflows, um eine Pipeline zwischen dem Repository und dem Projekt zu automatisieren. Passen Sie bei der Durchführung des Tutorials jeden Schritt an die CI- und CD-Pipelines und -Prozesse Ihres Repositorys an.
Sie können Entwürfe von Konfigurationen erst validieren und bereitstellen, nachdem sie in den Zweig Ihres Repositorys zusammengeführt wurden, der Ihre CD-Pipelines verwaltet. Sie müssen auch die Aktualisierungen aus Ihrem Repository mit Ihrem
Projekt synchronisieren, indem Sie die Konfigurationen aktualisieren, bevor Sie diese Konfigurationen validieren und bereitstellen können. Sie können diese Aktualisierung automatisieren, indem Sie die project.config.update API-Methode (wie in diesem Lernprogramm beschrieben) oder mit dem ibmcloud project config-update CLI-Befehl.
Vorbereitende Schritte
- Vergewissern Sie sich, dass Sie im Dienst IBM Cloud Projects die Rolle Editor haben.
- Führen Sie die Schritte aus, um Ihr Projekt mit einem Git Repository zu verbinden. Für dieses Tutorial verbinden Sie ein leeres Projekt mit einem GitHub Repository.
Hinzufügen von Geheimnissen und Variablen zu GitHub
Erstellen Sie Geheimnisse und Variablen in dem GitHub Repository, das Sie mit Ihrem Projekt verbunden haben. Diese Geheimnisse und Variablen werden im Arbeitsablauf von GitHub verwendet. Fügen Sie die folgenden Geheimnisse und Variablen hinzu:
-
Um sich mit Ihrem Projekt zu authentifizieren, müssen Sie einen IBM Cloud API-Schlüssel in Ihren GitHub Workflow einfügen. Um den API-Schlüssel sicher zu halten, führen Sie die Schritte zum Erstellen eines Geheimnisses für ein Repository aus, um den API-Schlüssel als Geheimnis in GitHub zu speichern. Für die Zwecke dieses Tutorials nennen Sie das Geheimnis
IBM_CLOUD_API_KEY. -
Als Nächstes führen Sie die Schritte zur Erstellung von Konfigurationsvariablen für Ihr GitHub Repository aus. Speichern Sie die folgenden Variablen:
Liste der Variablen, die in Ihrem GitHub Repository gespeichert werden sollen Variablenname Wert Beschreibung CONFIG_FOLDER_PATHconfigsDer Pfad zu dem Repository-Ordner, der mit Ihrem Projekt verbunden ist. Dieser Ordner enthält die Konfigurationsdateien aus Ihrem Projekt. IAM_URLhttps://iam.cloud.ibm.comDie URL auf Cloud Identity and Access Management. PROJECTS_API_BASE_URLhttps://projects.api.cloud.ibm.comDie URL zur Projekt-API.
Erstellen eines Workflows in GitHub
Führen Sie die Schritte zum Schreiben eines Workflows im Repository GitHub aus, das Sie mit Ihrem Projekt verbunden haben.
Beginnen Sie mit einer Beispiel-Workflow-Datei, die Sie unter GitHub nach Bedarf ändern können.
Sie können den Arbeitsablauf mit einer beliebigen Anzahl von Aufträgen anpassen, die Sie benötigen. Der folgende Code muss jedoch eingefügt werden, um Konfigurationen in Ihrem Projekt erfolgreich zu aktualisieren, wenn Änderungen aus einem Nebenzweig in den Hauptzweig Ihres Repositorys zusammengeführt werden:
-
Fügen Sie
types: [closed]zumonAbschnitt des Workflows hinzu, um den Workflow auszulösen, wenn eine Pull-Anfrage an den Hauptzweig geschlossen wird:# Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "main" branch # push: # branches: [ "main" ] pull_request: branches: [ "main" ] types: [closed] -
Fügen Sie eine
ifAnweisung hinzu, die diesen Workflow auslöst, wenn Änderungen in den Hauptzweig zusammengeführt werden:jobs: update-config: if: github.event.pull_request.merged == true runs-on: ubuntu-latest -
Fügen Sie den folgenden Code in den Workflow ein, damit Ihr Repository eine Verbindung zu Ihrem Projekt herstellen kann, wobei
IBM_CLOUD_API_KEYder Name des Geheimnisses ist, das Sie zu GitHub:IAM_TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token) -
Fügen Sie den folgenden Code ein, um festzustellen, welche Konfigurationen bearbeitet wurden:
# get files changed in the PR changed_files=$(git diff --name-only HEAD^ HEAD) echo "Changed files: $changed_files" for file in $changed_files; do # find config files that were changed if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then echo "Config file updated: ${file}" # extract data from config files PROJECT_ID=$(jq -r '.project_id' $file) CONFIG_ID=$(jq -r '.config_id' $file) DEF=$(jq '.definition' $file) echo "Project ID: ${PROJECT_ID}" echo "Config ID: ${CONFIG_ID}" -
Fügen Sie den folgenden Code ein, um die bearbeiteten Konfigurationen in Ihrem Projekt zu aktualisieren:
# update config definition RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data "{ \"definition\": ${DEF} }")
Beispiel-Workflow-Datei
Der folgende Codeschnipsel kann als Vorlage für Ihre Workflow-Datei verwendet werden:
name: Projects Git Integration Workflow
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
pull_request:
branches: [ "main" ]
types: [closed]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
update-configs:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Update Project Configs
run: |
IAM_TOKEN=$(curl -X POST "${{ vars.IAM_URL }}/identity/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token)
BASE_URL=${{ vars.PROJECTS_API_BASE_URL }}
# get files changed in the PR
changed_files=$(git diff --name-only HEAD^ HEAD)
echo "Changed files: $changed_files"
for file in $changed_files; do
# find config files that were changed
if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then
echo "Config file updated: ${file}"
# extract data from config files
PROJECT_ID=$(jq -r '.project_id' $file)
CONFIG_ID=$(jq -r '.config_id' $file)
DEF=$(jq '.definition' $file)
echo "Project ID: ${PROJECT_ID}"
echo "Config ID: ${CONFIG_ID}"
# update config definition
RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \
--header "Authorization: Bearer ${IAM_TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{ \"definition\": ${DEF} }")
echo $RESPONSE
ERR_CODE=$(echo $RESPONSE | jq '.code')
if [ "${ERR_CODE}" != "null" ]; then
exit 1
fi
else
echo "Not a project configuration file: ${file}"
fi
done
Testen des Arbeitsablaufs
Nachdem Ihr Workflow in GitHub, erstellt wurde, stellen Sie sicher, dass der Workflow erfolgreich läuft, indem Sie dem Projekt eine Konfiguration hinzufügen. Führen Sie die folgenden Schritte aus:
-
Klicken Sie in der Konsole IBM Cloud auf das Symbol Navigationsmenü
> Projekte und wählen Sie das Projekt aus, das mit Ihrem Repository GitHub verbunden ist.
-
Klicken Sie auf Erstellen, um eine Konfiguration zu Ihrem Projekt hinzuzufügen. Stellen Sie sicher, dass Sie einen Seitenzweig auswählen, in dem Ihre Konfiguration gespeichert wird.
-
Bearbeiten Sie die Konfiguration. Fügen Sie zum Beispiel eine Authentifizierungsmethode im Bereich Konfigurieren hinzu.
-
Wählen Sie den Seitenzweig aus, auf den Sie Ihre Änderungen übertragen wollen.
-
Klicken Sie auf Commit.
-
Gehen Sie zu Ihrem GitHub Repository und öffnen Sie eine Pull-Anfrage, um den Nebenzweig in den Hauptzweig Ihres Repositorys zusammenzuführen.
-
Stellen Sie sicher, dass Ihr Arbeitsablauf ausgeführt wird, wenn der Nebenzweig mit dem Hauptzweig zusammengeführt wird. Sie können dies im GitHub Repository und im Projekt überprüfen:
- Gehen Sie im Repository GitHub auf die Registerkarte Aktionen und wählen Sie den Workflow aus. Überprüfen Sie, ob die Aktualisierung erfolgreich durchgeführt wurde.
- Klicken Sie in Ihrem Projekt auf das Optionssymbol
> Bearbeiten für die hinzugefügte Konfiguration und wechseln Sie zum Hauptzweig. Vergewissern Sie sich, dass die Aktualisierung durchgeführt wurde. Zum Beispiel ist die Authentifizierungsmethode, die Sie zuvor hinzugefügt haben, im Bereich Konfigurieren enthalten.