Renovate - Automatyczne wykrywanie aktualizacji

Utrzymanie aktualnych zależności w repozytoriach to jedno z kluczowych wyzwań w nowoczesnych projektach IT. Ręczne sprawdzanie nowych wersji bibliotek, obrazów kontenerowych czy narzędzi infrastrukturalnych jest czasochłonne i podatne na błędy, a jednocześnie ma bezpośredni wpływ na bezpieczeństwo i stabilność systemów.
W tym wpisie pokażę, jak wykorzystuję Renovate do automatycznego wykrywania aktualizacji oraz integracji tego procesu z GitLab CI. Celem jest pełna automatyzacja — od detekcji nowych wersji zależności, przez tworzenie merge requestów, aż po kontrolę nad tym, kiedy i w jaki sposób aktualizacje trafiają do projektu.
Krok po kroku
Section titled “Krok po kroku”-
Utworzenie repozytoriów
Section titled “Utworzenie repozytoriów”- Definicja repozytorium pl.rachuna-net/artifacts/containers/renovate
-
Utworzenie kontenera za pomocą image buildera
Section titled “Utworzenie kontenera za pomocą image buildera”Wydanie wersji renovate v1.0.0
-
Utworzenie job
Section titled “Utworzenie job”tech_pipelines/renovate/.gitlab-ci.yml
--- 💥 Run renovate: stage: dependency image: $IMAGE_RENOVATE before_script: - !reference [.helper_gitlab-ci.sh] - git clone git@gitlab.com:pl.rachuna-net/platform-policies.git - | export GITHUB_TOKEN=$(curl -s -k -H "X-Vault-Token: $VAULT_TOKEN" $VAULT_ADDR/v1/kv-gitlab/data/pl.rachuna-net/auth/github | jq -r .data.data.GITHUB_TOKEN) script: - renovate "${CI_PROJECT_PATH}/platform-policies"Wydanie wersji v1.6.0
-
Dodanie konfiguracji w platform-policies
Section titled “Dodanie konfiguracji w platform-policies”renovate ├── config.js └── preset ├── default.json ├── gitlab-ci.json ├── image-builder.json ├── opentofu-iac.json └── opentofu-module.jsonWydanie wersji v1.0.0
W pierwszej kolejności należy przygotować konfiguracje
config.jsconst splitList = (value) => value ? value .split(",") .map((item) => item.trim()) .filter(Boolean) : undefined; module.exports = { $schema: "https://docs.renovatebot.com/renovate-schema.json", extends: [ "config:recommended", ":semanticCommits", ":timezone(Europe/Warsaw)" ], dependencyDashboard: false, assignees: splitList(process.env.RENOVATE_ASSIGNEES), reviewers: splitList(process.env.RENOVATE_REVIEWERS), gitAuthor: process.env.RENOVATE_GIT_AUTHOR, timezone: "Europe/Warsaw", schedule: ["before 6am"], prConcurrentLimit: 0, // 0 = brak limitu równoczesnych PR prHourlyLimit: 0, // 0 = brak limitu PR na godzinę rebaseWhen: "always", automerge: false, hostRules: [ { matchHost: "gitlab.com", hostType: "git-tags", token: process.env.GITLAB_TOKEN }, { matchHost: "github.com", token: process.env.GITHUB_TOKEN } ] };W kolejnej fazie plik do śledzenia zmian dla opentofu
{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "labels": [ "dependencies" ], "dependencyDashboardLabels": [ "dependencies" ], "assignees": [], "reviewers": [], "packageRules": [ { "matchManagers": [ "terraform" ], "matchDatasources": [ "terraform-provider", "terraform-module" ], "registryUrls": [ "https://registry.opentofu.org" ] }, { "matchManagers": [ "terraform" ], "matchDepTypes": [ "required_version" ], "matchDepNames": [ "hashicorp/terraform" ], "datasource": "github-releases", "replacementName": "opentofu/opentofu", "versioning": "semver", "semanticCommitType": "chore", "semanticCommitScope": "debs" }, { "matchUpdateTypes": [ "major" ], "semanticCommitType": "feat", "semanticCommitScope": "debs" }, { "matchUpdateTypes": [ "minor", "patch" ], "semanticCommitType": "fix", "semanticCommitScope": "debs" } ], "customManagers": [ { "customType": "regex", "managerFilePatterns": [ "/.*\\.tf$/" ], "matchStrings": [ "renovate repository:\\s*(?<depName>[^\\s]+)[\\s\\S]*?value\\s*=\\s*\"(?<currentValue>v[0-9][0-9A-Za-z.+-]+)\"" ], "datasourceTemplate": "gitlab-tags", "depNameTemplate": "{{depName}}" }, { "customType": "regex", "fileMatch": [ ".*\\.json$" ], "matchStrings": [ "\"gitlab_ci_path\"\\s*:\\s*\"[^\"]+@(?<depName>pl\\.rachuna-net/cicd/gitlab-ci):(?<currentValue>v[0-9][0-9A-Za-z.+-]*)\"" ], "datasourceTemplate": "gitlab-tags", "depNameTemplate": "{{depName}}" } ] } -
Podłączenie konfiguracji w repozytorium
Section titled “Podłączenie konfiguracji w repozytorium”{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "gitlab>pl.rachuna-net/platform-policies//renovate/preset/opentofu-iac.json" ] } -
Uruchomienie renovate
Section titled “Uruchomienie renovate”