Maak een aangepaste GitHub Actions workflow voor geautomatiseerd artifactbeheer
description
Maakt efficiënt en geautomatiseerd beheer van build-artifacts mogelijk, bespaart tijd en vermindert handmatige fouten bij opslag, versiebeheer en opruiming. Deze prompt helpt gebruikers workflows te maken die optimaal opslaggebruik behouden en consistent artifactbeheer over projecten waarborgen.
prompt
Help me een GitHub Actions workflow te bouwen die artifactbeheer automatiseert, inclusief het bouwen, opslaan, versiebeheer en opruimen van artifacts. Projecttype: <voer je projecttype in, bijvoorbeeld Docker, Java, P ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions workflow die het bouwen, opslaan, versiebeheer en opruimen van Docker-artifacts automatiseert, met gebruik van GitHub Packages en een bewaarbeleid van 30 dagen:
```yaml
name: Docker Build and Publish
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build Docker image
run: |
docker build -t ghcr.io/${{ github.repository }}:${{ github.sha }} .
- name: Push Docker image
run: |
docker push ghcr.io/${{ github.repository }}:${{ github.sha }}
- name: Tag latest
run: |
docker tag ghcr.io/${{ github.repository }}:${{ github.sha }} ghcr.io/${{ github.repository }}:latest
docker push ghcr.io/${{ github.repository }}:latest
# Automatisch opruimen van oude images na 30 dagen
# Dit kan via een aparte workflow of via een script
# Hier is een voorbeeld van een scheduled job die oude images verwijdert
name: Cleanup old Docker images
on:
schedule:
- cron: '0 0 * * *' # Elke dag om middernacht
jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: List images and delete images older than 30 days
run: |
# Voorbeeldscript om oude images te verwijderen
# Let op: GitHub biedt geen directe API voor het automatisch verwijderen van oude images via Actions
# Je kunt gebruik maken van de GitHub Container Registry API of CLI tools zoals 'ghcr' CLI
# Een eenvoudige manier is het gebruik van de gh CLI:
# Installeren van gh CLI
sudo apt-get install -y gh
gh auth login --with-token < <(echo "${{ secrets.GITHUB_TOKEN }}")
# Verkrijg lijst van images
# Hier moet je de juiste API calls of CLI commands gebruiken
# Voor complexere beheer, kan je een script schrijven die alle tags ophaalt en op datum filtert
# Dit is een placeholder voor de opruimactie
```
**Opmerkingen:**
- Vervang `${{ secrets.GITHUB_TOKEN }}` door je eigen token indien nodig.
- De automatische opruiming van images ouder dan 30 dagen moet via een script of API worden geïmplementeerd, aangezien GitHub Actions hier geen standaard functionaliteit voor biedt.
- Overweeg gebruik te maken van het [ghcr.io](https://docs.github.com/en/packages/working-with-a-github-packages-registry/about-github-container-registry) API of CLI voor geavanceerd beheer en verwijdering van oude images.
Met deze workflow bouw en publiceert je Docker images automatisch bij elke push naar main, en wordt er een scheduled job toegevoegd om oude images op te ruimen volgens het bewaarbeleid van 30 dagen.
provider: deepseek
model: deepseek-chat
Hier is een GitHub Actions workflow voor Docker artifactbeheer met GitHub Packages:
```yaml
name: Docker Build, Push and Cleanup
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 1 * * *' # Dagelijks om 01:00 UTC
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,prefix=,suffix=,format=long
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cleanup:
runs-on: ubuntu-latest
needs: build-and-push
permissions:
packages: write
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.9'
- name: Install GitHub CLI
run: |
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh -y
- name: Delete old packages
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Verwijder packages ouder dan 30 dagen
cutoff_date=$(date -d "30 days ago" +%Y-%m-%dT%H:%M:%SZ)
# Haal package versies op en filter op oude versies
packages=$(gh api /user/packages/container/${{ github.event.repository.name }}/versions --jq '.[] | select(.updated_at < "'$cutoff_date'") | .id')
for package_id in $packages; do
echo "Verwijderen package ID: $package_id"
gh api --method DELETE /user/packages/container/${{ github.event.repository.name }}/versions/$package_id
done
- name: Cleanup complete
run: echo "Cleanup van oude artifacts voltooid"
```
**Belangrijke configuraties:**
1. **Trigger**: Wordt uitgevoerd bij pushes naar main/develop branches, PR's en dagelijks om 01:00 UTC
2. **Build & Push**:
- Gebruikt GitHub Container Registry (ghcr.io)
- Automatische tagging met SHA, branch naam en semantische versies
- Authenticatie met GITHUB_TOKEN
3. **Cleanup**:
- Verwijderd automatisch packages ouder dan 30 dagen
- Gebruikt GitHub CLI voor package management
- Draait dagelijks via schedule trigger
**Benodigde permissions** in repository settings:
- `contents: read`
- `packages: write`
**Opmerking**: De cleanup functie gebruikt de GitHub CLI en heeft write permissions nodig voor packages. Zorg dat de GITHUB_TOKEN voldoende rechten heeft.