CI ã§ã®ããªã·ãŒæºæ ã®è©äŸ¡
CI ãã€ãã©ã€ã³ã«ããªã·ãŒè©äŸ¡ãè¿œå ããããšã§ãã³ãŒãå€æŽã«ãã£ãŠããªã·ãŒæºæ ãåºæºãšæ¯èŒããŠæªåããã±ãŒã¹ãæ€åºããé²æ¢ã§ããŸãã
CI ç°å¢ã§ã®ããªã·ãŒè©äŸ¡ã®æšå¥šæŠç¥ã¯ãããŒã«ã«ã€ã¡ãŒãžãè©äŸ¡ãããã®çµæãåºæºãšæ¯èŒããããšã§ããããŒã«ã«ã€ã¡ãŒãžã®ããªã·ãŒæºæ ãåºæºãããæªåããŠããå ŽåãCI ã©ã³ã¯ãšã©ãŒã§å€±æããŸããããªã·ãŒæºæ ãæ¹åãŸãã¯å€ãããªãå ŽåãCI ã©ã³ã¯æåããŸãã
ãã®æ¯èŒã¯çžå¯Ÿçã§ãããCI ã€ã¡ãŒãžãåºæºãšæ¯ã¹ãŠãè¯ããããæªãããã®ã¿ãè©äŸ¡ããŸãããã¹ãŠã®ããªã·ãŒãééãããã©ããããã§ãã¯ãã絶察çãªåºæºã§ã¯ãããŸãããå®çŸ©ããåºæºã«å¯ŸããŠæ¯èŒããããšã§ãå€æŽãããªã·ãŒæºæ ã«å¯ŸããŠãã©ã¹ããã€ãã¹ã®åœ±é¿ãåãŒããŠããããããã«ç¢ºèªã§ããŸãã
ä»çµã¿
CI ã§ããªã·ãŒè©äŸ¡ãå®è¡ããéã«ã¯ãCI ãã€ãã©ã€ã³å ã§ãã«ãããã€ã¡ãŒãžã«å¯ŸããŠããŒã«ã«ããªã·ãŒè©äŸ¡ãå®è¡ããŸããããŒã«ã«è©äŸ¡ãå®è¡ããããã«ã¯ãCI ã¯ãŒã¯ãããŒãå®è¡ãããŠããç°å¢ã®ã€ã¡ãŒãžã¹ãã¢ã«ã€ã¡ãŒãžãååšããå¿ èŠããããŸããã€ã¡ãŒãžããã«ããŸãã¯ãã«ããåŸã«è©äŸ¡ãå®è¡ããŸãã
ããŒã«ã«ã€ã¡ãŒãžã®ããªã·ãŒæºæ ãåºæºãããæªåããŠããå Žåã«å€±æããããããªã·ãŒè©äŸ¡ãå®è¡ããã«ã¯ãåºæºãšããŠäœ¿çšããã€ã¡ãŒãžããŒãžã§ã³ãæå®ããå¿
èŠããããŸããç¹å®ã®ã€ã¡ãŒãžãªãã¡ã¬ã³ã¹ãããŒãã³ãŒãã£ã³ã°ããããšãå¯èœã§ãããããè¯ãæ¹æ³ã¯å®è¡ç°å¢ã䜿çšããŠèªåçã«ã€ã¡ãŒãžããŒãžã§ã³ãæšè«ããããšã§ãã以äžã®äŸã§ã¯ãproduction
ç°å¢å
ã®ã€ã¡ãŒãžãš CI ã€ã¡ãŒãžãæ¯èŒããããã«ç°å¢ã䜿çšããŠããŸãã
äŸ
CI ã§ããªã·ãŒè©äŸ¡ãå®è¡ãã以äžã®äŸã§ã¯ãDocker Scout GitHub Actionâ ã䜿çšããŠãCI ã§ãã«ããããã€ã¡ãŒãžã«å¯Ÿã㊠compare
ã³ãã³ããå®è¡ããŸããcompare
ã³ãã³ãã«ã¯ to-env
å
¥åããããããã production
ãšããç°å¢ã«å¯ŸããŠæ¯èŒãè¡ãããã«èšå®ããŸããexit-on
å
¥å㯠policy
ã«èšå®ãããŠãããããªã·ãŒæºæ ãæªåããå Žåã«ã®ã¿æ¯èŒã倱æããŸãã
ãã®äŸã¯ãã³ã³ããã¬ãžã¹ããªãšã㊠Docker Hub ã䜿çšããŠãããšä»®å®ããŠããŸããããã®ããããã®ã¯ãŒã¯ãããŒã§ã¯ docker/login-action
ã2å䜿çšããŠããŸã:
- ã³ã³ããã¬ãžã¹ããªãžã®èªèšŒã®ãã
production
ã€ã¡ãŒãžã®åæçµæãååŸããããã« Docker ãžã®èªèšŒã®ãã
Docker Hub ãã³ã³ããã¬ãžã¹ããªãšããŠäœ¿çšããŠããå ŽåãèªèšŒã¯äžåºŠã§æžã¿ãŸãã
Docker Engine ã®å¶éã«ããããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãã¢ãã¹ããŒã·ã§ã³ãå«ãã€ã¡ãŒãžãã€ã¡ãŒãžã¹ãã¢ã«ããŒãããããšã¯ã§ããŸããã
ããªã·ãŒè©äŸ¡ãæ©èœãããã«ã¯ãã©ã³ããŒã®ããŒã«ã«ã€ã¡ãŒãžã¹ãã¢ã«ã€ã¡ãŒãžãããŒãããå¿ èŠããããŸããåäžãã©ãããã©ãŒã ã€ã¡ãŒãžãã¢ãã¹ããŒã·ã§ã³ãªãã§ãã«ããããã«ãçµæãããŒãããŠããããšã確èªããŠãã ãããããã§ãªãå Žåãããªã·ãŒè©äŸ¡ã¯å€±æããŸãã
ãŸãããžã§ãã« pull-requests: write
ã®æš©éãèšå®ãããŠããããšã«ã泚æããŠãã ãããDocker Scout GitHub Action ã¯ããã©ã«ãã§ããªã·ãŒè©äŸ¡çµæãå«ããã«ãªã¯ãšã¹ãã³ã¡ã³ããè¿œå ããããããã®æš©éãå¿
èŠã§ãã詳现ã«ã€ããŠã¯ããã«ãªã¯ãšã¹ãã³ã¡ã³ãâãåç
§ããŠãã ããã
name: Docker
on:
push:
tags: ["*"]
branches:
- "main"
pull_request:
branches: ["**"]
env:
REGISTRY: docker.io
IMAGE_NAME: <IMAGE_NAME>
DOCKER_ORG: <ORG>
jobs:
build:
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
- name: Build image
id: build-and-push
uses: docker/build-push-action@v4
with:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
sbom: ${{ github.event_name != 'pull_request' }}
provenance: ${{ github.event_name != 'pull_request' }}
push: ${{ github.event_name != 'pull_request' }}
load: ${{ github.event_name == 'pull_request' }}
- name: Authenticate with Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PAT }}
- name: Compare
if: ${{ github.event_name == 'pull_request' }}
uses: docker/scout-action@v1
with:
command: compare
image: ${{ steps.meta.outputs.tags }}
to-env: production
platform: "linux/amd64"
ignore-unchanged: true
only-severities: critical,high
organization: ${{ env.DOCKER_ORG }}
exit-on: policy
以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãããªã·ãŒãåºæºãšæ¯èŒã㊠PR ã€ã¡ãŒãžã§æªåããŠããããã«ããªã·ãŒè©äŸ¡ãã§ãã¯ã倱æããéã® GitHub PR ã³ã¡ã³ãã®äŸã瀺ããŠããŸãã
ãã®äŸã¯ãGitHub Actions ã䜿çšã㊠CI ã§ããªã·ãŒè©äŸ¡ãå®è¡ããæ¹æ³ã瀺ããŸãããDocker Scout ã¯ä»ã® CI ãã©ãããã©ãŒã ããµããŒãããŠããŸãã詳现ã«ã€ããŠã¯ãDocker Scout CI çµ±åãåç §ããŠãã ããã