Blog

Wie man Anwendungsabhängigkeiten in einer CI/CD-Pipeline aktualisiert

Mark van Holsteijn

Aktualisiert Oktober 20, 2025
4 Minuten

In diesem Blog stelle ich Ihnen den Renovate-Bot vor, ein großartiges Tool, mit dem Sie die Aktualisierung von Anwendungsabhängigkeiten in Ihrem Quellcode automatisieren können.

In meinem letzten Blog habe ich mein selbst entwickeltes Dienstprogramm "fromage" vorgestellt. Es erkennt Verweise auf veraltete Container-Image-Referenzen in Dockerdateien und aktualisiert diese automatisch. Es hat Spaß gemacht, dieses Dienstprogramm in Go zu schreiben, aber der Renovate-Bot ist noch viel besser: Er automatisiert die Aktualisierung von Abhängigkeiten für eine Vielzahl von Tools und Sprachen. Der Renovate-Bot erkennt und aktualisiert Abhängigkeiten in Bazel, Docker, Golang, Java, JavaScript, Node.js, Nuget, PHP, Python, Ruby und mehr.

Erste Schritte

Es ist wirklich einfach, mit dem Renovate-Bot zu beginnen. Sie fügen einfach die Konfigurationsdatei zum Hauptzweig des Repositorys hinzu und schon kann es losgehen! Lassen Sie den Bot einfach in regelmäßigen Abständen laufen und er wird Pull Requests erstellen, sobald ein Update verfügbar ist. In diesem Blog werde ich das fromage-Repository verwenden, um seine Nützlichkeit zu demonstrieren:

das Repository klonen

Um das Repository zu klonen, geben Sie ein:

$ git clone --quiet git@github.com:binxio/fromage.git

renovieren Bot konfigurieren

Um dem Bot zu erlauben, Ihr Repository zu renovieren, fügen Sie eine Konfiguration wie unten gezeigt hinzu:

$ cd fromage
$ cat > renovate.json <<!
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base",
    ":disableRateLimiting"
  ]
}
!
$ git add renovate.json
$ git commit -m 'add renovate configuration'
[main 4944645] add renovate configuration
 1 file changed, 7 insertions(+)
 create mode 100644 renovate.json

Es gibt eine Vielzahl von Konfigurationsoptionen. Hier habe ich die Basiskonfiguration verwendet und die Ratenbegrenzung deaktiviert, um die volle Wirkung des Bots zu zeigen.

zu Gitlab pushen

Um den Renovate-Bot für ein Gitlab-Repository zu verwenden, geben Sie ein:

$ GITLAB_USERNAME=$(ssh git@gitlab.com 2>&1 | 
  sed -n -e 's/Welcome to GitLab, @(.*)!/1/p')

$ git remote set-url origin git@gitlab.com:$GITLAB_USERNAME/fromage.git
$ git push --quiet
remote:
remote: The private project mvanholsteijn/fromage was successfully created.
remote:
$ cd ..

Natürlich funktioniert der Bot mit jedem größeren Git-Repository-Anbieter.

den Bot konfigurieren

Um den Renovate-Bot zu konfigurieren, erstellen Sie eine Javascript-Datei namens config.js:

$ mkdir -p config
$ cat > config/config.js <<!
module.exports = {
  repositories: ['$GITLAB_USERNAME/fromage'],
  endpoint: 'https://gitlab.com/api/v4/',
  git_author: 'Renovate Bot <noreply@renovatebot.com>',
  platform: 'gitlab',
  onboardingConfig: {
    extends: ['config:base', ":disableRateLimiting"]
  }
};
!

Setzen der Token

Um den Bot auszuführen, benötigen Sie Zugangstoken für Gitlab und Github:

$ read -sp 'github token: ' GITHUB_TOKEN
github token:
$ read -sp 'gitlab token: ' GITLAB_TOKEN
gitlab token:

Das Github-Token muss nur die Berechtigung zum Lesen öffentlicher Repositories enthalten. Damit werden die Versionshinweise zu den Pull Requests für aktualisierte Abhängigkeiten hinzugefügt. Das Gitlab-Token benötigt die Berechtigungen api, read_user und write_repository.

Betrieb des Renovierungs-Bots

Es gibt viele Möglichkeiten, den Renovate-Bot auszuführen. Um das Docker-Container-Image zu verwenden, geben Sie ein:

$ docker run --platform linux/amd64 
  -v $PWD/config/:/config/ 
  -v $HOME/.ssh:/home/ubuntu/.ssh 
  -e RENOVATE_CONFIG_FILE=/config/config.js 
  -e RENOVATE_TOKEN=$GITLAB_TOKEN 
  -e GITHUB_COM_TOKEN=$GITHUB_TOKEN 
  renovate/renovate

INFO: Repository started (repository=mvanholsteijn/fromage)
      "renovateVersion": "25.21.4"
INFO: Dependency extraction complete (repository=mvanholsteijn/fromage)
      "baseBranch": "main",
      "stats": {
    "managers": {
      "cloudbuild": {"fileCount": 1, "depCount": 1},
      "dockerfile": {"fileCount": 1, "depCount": 2},
      "gomod": {"fileCount": 1, "depCount": 9}
    },
    "total": {"fileCount": 3, "depCount": 12}
      }
INFO: Branch created (repository=mvanholsteijn/fromage, branch=renovate/golang.org-x-crypto-digest)
      "commitSha": "30783c9"
INFO: PR created (repository=mvanholsteijn/fromage, branch=renovate/golang.org-x-crypto-digest)
      "pr": 1,
      "prTitle": "Update golang.org/x/crypto commit hash to c07d793"
INFO: Branch created (repository=mvanholsteijn/fromage, branch=renovate/index.docker.io-alpine-git-2.x)
      "commitSha": "75c0c25"
INFO: PR created (repository=mvanholsteijn/fromage, branch=renovate/index.docker.io-alpine-git-2.x)
      "pr": 2,
      "prTitle": "Update index.docker.io/alpine/git Docker tag to v2.30.2"
INFO: Branch created (repository=mvanholsteijn/fromage, branch=renovate/golang-1.x)
      "commitSha": "ca9a287"
INFO: PR created (repository=mvanholsteijn/fromage, branch=renovate/golang-1.x)
      "pr": 3,
      "prTitle": "Update golang Docker tag to v1.16"
INFO: Branch created (repository=mvanholsteijn/fromage, branch=renovate/github.com-google-go-containerregistry-0.x)
      "commitSha": "74648ca"
INFO: PR created (repository=mvanholsteijn/fromage, branch=renovate/github.com-google-go-containerregistry-0.x)
      "pr": 4,
      "prTitle": "Update module github.com/google/go-containerregistry to v0.5.0"
INFO: Branch created (repository=mvanholsteijn/fromage, branch=renovate/github.com-kevinburke-ssh_config-1.x)
      "commitSha": "be1e5bb"
INFO: PR created (repository=mvanholsteijn/fromage, branch=renovate/github.com-kevinburke-ssh_config-1.x)
      "pr": 5,
      "prTitle": "Update module github.com/kevinburke/ssh_config to v1"
INFO: Repository finished (repository=mvanholsteijn/fromage)
      "durationMs": 83746

Wie Sie sehen können, hat der Renovate-Bot fünf Pull Requests für alle veralteten Abhängigkeiten erstellt. Jede Pull-Anfrage befindet sich in einem eigenen Zweig. Alle Zweige beginnen mit dem Namen renovate.

Änderungen

Um die Änderungen des Renovierungs-Bots zu sehen, geben Sie ein:

$ get fetch --all
$ for b in $(git branch  --all | grep renovate); do
echo $b ; git diff --numstat main $b
done

remotes/origin/renovate/github.com-google-go-containerregistry-0.x
1       1       go.mod
30      0       go.sum
remotes/origin/renovate/github.com-kevinburke-ssh_config-1.x
1       2       go.mod
10      9       go.sum
remotes/origin/renovate/golang-1.x
1       1       Dockerfile
remotes/origin/renovate/golang.org-x-crypto-digest
1       1       go.mod
8       0       go.sum
remotes/origin/renovate/index.docker.io-alpine-git-2.x
1       1       Dockerfile

Wie Sie sehen können, hat der Bot sowohl die Abhängigkeiten von Go-Modulen als auch die Referenzen der Dockerfile-Images geändert. Sie können die von ihm erstellten Pull Requests überprüfen und gegebenenfalls zusammenführen, um die Anwendungsabhängigkeiten zu aktualisieren.

Fazit

Der renovate bot ist ein unverzichtbares Dienstprogramm, um eine Vielzahl von Abhängigkeiten aktuell zu halten. In dieser Demonstration habe ich die Kommandozeilenvariante auf meinem lokalen Rechner verwendet. Sie können jedoch sowohl gehostete als auch selbst gehostete Varianten des Bots verwenden. Ich empfehle die Verwendung des Renovate-Bots in jeder Cloud Native CI/CD-Build-Pipeline.

Foto von John Barkiple auf Unsplash

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.