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

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
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.
Unsere Ideen
Weitere Blogs
Contact



