Docker Scout ã GitHub Actions ãšé£æºãã
以äžã®äŸã§ã¯ãGitHub Actions 㧠Docker Scout ã®ã¯ãŒã¯ãããŒãèšå®ããæ¹æ³ã瀺ããŠããŸãããã®ã¢ã¯ã·ã§ã³ã¯ãã«ãªã¯ãšã¹ãã«ãã£ãŠããªã¬ãŒãããã€ã¡ãŒãžããã«ããããã®æ°ããããŒãžã§ã³ãæ¬çªç°å¢ã§çšŒåäžã®ã€ã¡ãŒãžãšæ¯èŒããŸãã
ãã®ã¯ãŒã¯ãããŒã¯ãdocker scout compare
ã³ãã³ããå®è¡ããããã« docker/scout-actionâ GitHub Action ã䜿çšããŠããããã«ãªã¯ãšã¹ãã®ã€ã¡ãŒãžãæ¬çªç°å¢ã§çšŒåããŠããã€ã¡ãŒãžãšã©ã®ããã«æ¯èŒãããããå¯èŠåããŸãã
åææ¡ä»¶
- ãã®äŸã§ã¯ãDocker HubãŸãã¯ä»ã®ã¬ãžã¹ããªã«Docker Scoutãæå¹ã«ããæ¢åã®ã€ã¡ãŒãžãªããžããªãããããšãåæãšããŠããŸãã
- ãã®äŸã§ã¯ãå®è¡ç°å¢ ã䜿çšããŠããã«ãªã¯ãšã¹ãã§ãã«ããããã€ã¡ãŒãžã
production
ãšããç°å¢ã§ã®åãã€ã¡ãŒãžã®ç°ãªãããŒãžã§ã³ãšæ¯èŒããŸãã
æé
ãŸããGitHub Actions ã¯ãŒã¯ãããŒãèšå®ããŠã€ã¡ãŒãžããã«ãããŸããããã§ã¯ Docker Scout ã«ç¹åãããã®ã§ã¯ãããŸããããæ¯èŒããããã®ã€ã¡ãŒãžããã«ãããå¿ èŠããããŸãã
以äžã GitHub Actions ã® YAML ãã¡ã€ã«ã«è¿œå ããŸãã
name: Docker
on:
push:
tags: ["*"]
branches:
- "main"
pull_request:
branches: ["**"]
env:
# ã¬ãžã¹ããªã®ãã¹ãå
REGISTRY: docker.io
# ã€ã¡ãŒãžãªããžããªïŒãã¹ãåãšã¿ã°ãªãïŒ
IMAGE_NAME: ${{ github.repository }}
SHA: ${{ github.event.pull_request.head.sha || github.event.after }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Docker buildx ã®ã»ããã¢ãã
uses: docker/setup-buildx-action@v3
# ã³ã³ããã¬ãžã¹ããªãžã®èªèšŒ
- name: ã¬ãžã¹ã㪠${{ env.REGISTRY }} ãžã®èªèšŒ
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
# Docker ã¡ã¿ããŒã¿ãæœåº
- name: Docker ã¡ã¿ããŒã¿ã®æœåº
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
labels: |
org.opencontainers.image.revision=${{ env.SHA }}
tags: |
type=edge,branch=$repo.default_branch
type=semver,pattern=v{{version}}
type=sha,prefix=,suffix=,format=short
# Buildx 㧠Docker ã€ã¡ãŒãžããã«ãããã³ããã·ã¥
# ïŒãã«ãªã¯ãšã¹ãæã«ã¯ããã·ã¥ãããããŒãã®ã¿ïŒ
- name: Docker ã€ã¡ãŒãžã®ãã«ããšããã·ã¥
id: build-and-push
uses: docker/build-push-action@v6
with:
sbom: ${{ github.event_name != 'pull_request' }}
provenance: ${{ github.event_name != 'pull_request' }}
push: ${{ github.event_name != 'pull_request' }}
load: ${{ github.event_name == 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
ãã®ã¯ãŒã¯ãããŒã¯ä»¥äžã®ã¹ããããå®è¡ããŸãã
- Docker buildx ãã»ããã¢ããããŸãã
- ã¬ãžã¹ããªãžã®èªèšŒãè¡ããŸãã
- Git ãªãã¡ã¬ã³ã¹ã GitHub ã€ãã³ãããã¡ã¿ããŒã¿ãæœåºããŸãã
- Dockerã€ã¡ãŒãžããã«ãããã¬ãžã¹ããªã«ããã·ã¥ããŸãã
ãã®CIã¯ãŒã¯ãããŒã¯ããŒã«ã«ã®ã€ã¡ãŒãžåæãšè©äŸ¡ãå®è¡ããŸããã€ã¡ãŒãžãããŒã«ã«ã§è©äŸ¡ããããã«ã¯ãã©ã³ããŒã®ããŒã«ã«ã€ã¡ãŒãžã¹ãã¢ã«ã€ã¡ãŒãžãããŒããããŠããå¿ èŠããããŸãã
ã€ã¡ãŒãžãã¬ãžã¹ããªã«ããã·ã¥ããå Žåãããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãSBOMã蚌ææžä»ãã€ã¡ãŒãžãªã©ãããŒã«ã«ã€ã¡ãŒãžã¹ãã¢ã«ããŒãã§ããªãå Žåããã®æ¯èŒã¯æ©èœããŸããã
ãã®èšå®ãå®äºããããã€ã¡ãŒãžã®æ¯èŒãå®è¡ããããã®ä»¥äžã®ã¹ããããè¿œå ããŸãã
# Docker Hubãã¬ãžã¹ããªã®å Žåããã®ã¹ããããã¹ãããã§ããŸã
# æ¢ã«èªèšŒãããŠãããã
- name: Dockerãžã®èªèšŒ
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PAT }}
# ãã«ãªã¯ãšã¹ãã§ãã«ããããã€ã¡ãŒãžãæ¬çªç°å¢ã®ã€ã¡ãŒãžãšæ¯èŒ
- name: Docker Scout
id: docker-scout
if: ${{ github.event_name == 'pull_request' }}
uses: docker/scout-action@v1
with:
command: compare
image: ${{ steps.meta.outputs.tags }}
to-env: production
ignore-unchanged: true
only-severities: critical,high
github-token: ${{ secrets.GITHUB_TOKEN }}
compare
ã³ãã³ãã¯ã€ã¡ãŒãžãåæããããªã·ãŒã³ã³ãã©ã€ã¢ã³ã¹ãè©äŸ¡ããŸãããããŠçµæã production
ç°å¢ã®å¯Ÿå¿ããã€ã¡ãŒãžãšç
§åããŸãããã®äŸã§ã¯ãé倧ããã³é«ãªã¹ã¯ã®è匱æ§ã®ã¿ãå«ã¿ãäž¡æ¹ã®ã€ã¡ãŒãžã«ååšããè匱æ§ã¯é€å€ãããå€æŽããã£ããã®ã®ã¿ã衚瀺ãããŸãã
GitHub Action ã¯ãæ¯èŒçµæããã«ãªã¯ãšã¹ãã³ã¡ã³ãã«ããã©ã«ãã§åºåããŸãã
Policies ã»ã¯ã·ã§ã³ãå±éãããšã2ã€ã®ã€ã¡ãŒãžéã®ããªã·ãŒã³ã³ãã©ã€ã¢ã³ã¹ã®éãã確èªã§ããŸãããã®äŸã§ã¯ãæ°ããã€ã¡ãŒãžã¯å®å šã«ã¯æºæ ããŠããŸããããããŒã¹ã©ã€ã³ãšæ¯èŒããŠæ°ããã€ã¡ãŒãžã®è©äŸ¡ãæ¹åãããããšã衚瀺ãããŠããŸãã