Ontwikkel een GitLab CI-pijplijn voor geautomatiseerde releaseversiebeheer en changeloggeneratie
description
Met deze prompt kun je een GitLab CI-pijplijn maken die automatisch versies beheert en overzichtelijke changelogs genereert, wat handmatige fouten vermindert, tijd bespaart en zorgt voor een gestructureerd releaseproces. Dit verbetert de transparantie en traceerbaarheid van releases en voorkomt inconsistenties die bij handmatige processen kunnen optreden.
prompt
Help me met het ontwerpen van een GitLab CI-pijplijn die automatisch releaseversies beheert en changelogs genereert bij elke deployment. Mijn huidige GitLab CI-configuratie: <voer je huidige GitLab CI YAML-configuratie in>. Versiebeheerstrategie: <beschrijf de versiebeheerstrategie, bijvoorbeeld semantische versie of datumgebaseerd>. Changelog ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van een GitLab CI/CD-configuratie die automatisch releaseversies beheert en changelogs genereert, gebaseerd op jouw specificaties:
```yaml
stages:
- build
- release
- deploy
variables:
# Stel de versie op basis van Git tags of gebruik een tool zoals semantic-release
# Hier wordt een voorbeeld gebruikt met semantic-release
RELEASE_VERSION: "v$(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}')"
build:
stage: build
script:
- make build
release:
stage: release
only:
- main
image: node:16 # of een andere geschikte image met node en tools
script:
- npm install -g semantic-release @semantic-release/changelog @semantic-release/git
- semantic-release --dry-run # Test eerst zonder acties
- semantic-release
- # Na succesvolle release, maak changelog
- npx conventional-changelog -p angular -i CHANGELOG.md -s -r 0
- git config --global user.email "ci@yourdomain.com"
- git config --global user.name "CI/CD Bot"
- git add CHANGELOG.md
- git commit -m "chore(release): update changelog for version $(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}')"
- git tag $(semantic-release --dry-run | grep 'The next release is' | awk '{print $NF}')
- git push origin main --tags
deploy:
stage: deploy
only:
- main
script:
- make deploy
```
**Uitleg:**
- **Stages:** Ik heb een extra 'release' stage toegevoegd tussen build en deploy.
- **Semantic-release:** Wordt gebruikt voor versiebeheer en release automation. Het bepaalt automatisch de volgende versie op basis van commitberichten conform conventies.
- **Changelog:** Met `conventional-changelog` wordt een markdown changelog gegenereerd met commitberichten en auteurs.
- **Automatisering:** Na een succesvolle release wordt de changelog gecommit en getagd, en vervolgens gepusht.
- **Beperkingen:** Alleen op de `main` branch worden releases gedaan.
**Aanpassingen:**
- Zorg dat je project commits volgt met conventie (bijv. Angular commit conventions) zodat semantic-release correct werkt.
- Voeg in je project een `semantic-release` configuratiebestand toe (`.releaserc`), bijvoorbeeld:
```json
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/git"
]
}
```
**Benodigdheden:**
- Voeg je semantic-release en andere benodigde packages toe aan je project.
- Zorg dat de CI/CD pipeline beschikt over de juiste toegangs- en authenticatiemiddelen (bijv. SSH-sleutels, tokens).
Wil je dat ik een meer gedetailleerde setup of hulp bij de configuratie van semantic-release of andere tools geef?
provider: deepseek
model: deepseek-chat
Hier is een verbeterde GitLab CI-configuratie voor automatisch versiebeheer en changelog-generatie:
```yaml
stages:
- build
- test
- version
- deploy
variables:
CHANGELOG_FILE: "CHANGELOG.md"
# Alleen uitvoeren op main branch
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "main"
build:
stage: build
script:
- make build
artifacts:
paths:
- build/
test:
stage: test
script:
- make test
dependencies:
- build
version:
stage: version
image: node:16
before_script:
- npm install -g conventional-changelog conventional-changelog-cli
script:
# Bepaal nieuwe versie op basis van commit messages
- |
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
echo "Laatste tag: $LATEST_TAG"
# Analyseer commit messages voor versie bump type
- |
COMMITS_SINCE_TAG=$(git log --oneline $LATEST_TAG..HEAD)
if echo "$COMMITS_SINCE_TAG" | grep -q "BREAKING CHANGE\|!"; then
BUMP_TYPE="major"
elif echo "$COMMITS_SINCE_TAG" | grep -q "feat:"; then
BUMP_TYPE="minor"
else
BUMP_TYPE="patch"
fi
# Bereken nieuwe versie
- |
VERSION=$(echo $LATEST_TAG | sed 's/^v//')
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
case $BUMP_TYPE in
"major") NEW_MAJOR=$((MAJOR + 1)); NEW_VERSION="$NEW_MAJOR.0.0" ;;
"minor") NEW_MINOR=$((MINOR + 1)); NEW_VERSION="$MAJOR.$NEW_MINOR.0" ;;
"patch") NEW_PATCH=$((PATCH + 1)); NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH" ;;
esac
NEW_TAG="v$NEW_VERSION"
echo "Nieuwe versie: $NEW_TAG"
echo "NEW_VERSION=$NEW_VERSION" > version.env
echo "NEW_TAG=$NEW_TAG" >> version.env
# Genereer changelog
- conventional-changelog -p angular -i $CHANGELOG_FILE -s
# Commit changelog en versie update
- |
git config --global user.email "ci@example.com"
git config --global user.name "GitLab CI"
git add $CHANGELOG_FILE
git commit -m "chore: update changelog for $NEW_TAG"
git tag $NEW_TAG
git push origin main --tags
artifacts:
reports:
dotenv: version.env
rules:
- if: $CI_COMMIT_BRANCH == "main"
deploy:
stage: deploy
script:
- echo "Deploying version $NEW_VERSION"
- make deploy
# Maak GitLab release aan
- |
curl --request POST \
--header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \
--data "name=Release $NEW_TAG" \
--data "tag_name=$NEW_TAG" \
--data "description=$(cat $CHANGELOG_FILE | head -20)" \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"
dependencies:
- build
- version
rules:
- if: $CI_COMMIT_BRANCH == "main"
```
**Aanvullende vereisten:**
1. **Commit Convention:** Zorg dat je team conventional commits gebruikt:
```
feat: nieuwe feature
fix: bug fix
docs: documentatie
breaking change: major versie bump
```
2. **Package.json** (optioneel maar aanbevolen):
```json
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
},
"devDependencies": {
"conventional-changelog-cli": "^2.0.0"
}
}
```
3. **GitLab Instellingen:**
- Zorg dat de CI_TOKEN voldoende rechten heeft voor git pushes en releases
- Stel protected branches in voor main
**Werking:**
- De pijplijn loopt alleen op de main branch
- Conventional-changelog analyseert commit messages voor versiebepaling
- Automatische semantische versienummering op basis van commit types
- Changelog wordt gegenereerd met commit berichten en auteurs
- Git tags en releases worden automatisch aangemaakt
Deze configuratie zorgt voor volledig geautomatiseerd versiebeheer volgens semantische versienummers met professionele changelogs.