๐Ÿ’ป
DevOps Cookbook
  • Home
    • Meiko DevOps Cookbook
  • Gitlab
    • Tips
      • ์‚ฌ์ „ ์ •์˜๋œ CI/CD ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ ์„ธํŠธ
    • ๋”ฅ๋‹ค์ด๋ธŒ Gitlab CI/CD
      • GitLab CI/CD ์‹œ์ž‘ํ•˜๊ธฐ
        • .gitlab-ci.yml ํŒŒ์ผ
        • Runner
        • ํŒŒ์ดํ”„๋ผ์ธ
        • CI/CD ๋ณ€์ˆ˜
        • CI/CD ์ปดํฌ๋„ŒํŠธ
      • CI/CD YAML ๊ตฌ๋ฌธ ์ฐธ์กฐ
    • CI/CD Notifications
      • CI/CD slack notifiaction ๊ตฌ์ถ•์ž‘์—… ๊ฒฐ๊ณผ
  • Kubernetes
    • Persistence Volume
      • play-cluster
    • Ingress
      • Ingress๋ž€
      • ์ˆ˜๋™์œผ๋กœ ingress ๋ฐฐํฌํ•˜๊ธฐ
    • Security
    • HPA
      • hpa troubleshooting history
        • 1. HELM_UPGRADE_VALUES_FILE๋กœ hpa๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š” ์›์ธ
        • 2. targetCPUUtilizationPercentage ๊ณ„์‚ฐ์€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€
        • 3. helm values์— cpu resource ๋‹จ์œ„๋ฅผ 1๋กœ ํ–ˆ์„ ๋•Œ ์‹ค์ œ ํŒŒ๋“œ์— 1m( 0.001 ) ์ฝ”์–ด๊ฐ€ ๋ถ€์—ฌ๋œ ๊ฒƒ
        • 4. pod cpu resources๊ฐ€ ํ• ๋‹น๋ฐ›์€ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ธ ์ง€ ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ธ์ง€ ๊ฒ€์ฆ
        • 5. ์„ค์ •ํ•œ hpa๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ pod auto scaling์ด ๋™์ž‘ํ•˜๋Š” ์ง€ ๊ฒ€์ฆ
      • HorizontalPodAutoscaler์˜ behavior ํ•„๋“œ ์ค‘ stabilizationWindowSeconds ๊ฐ’์ด Kubernetes ์ฝ”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๋ถ„์„
  • prometheus
    • prometheus ๋ฆฌ์†Œ์Šค alert ์„ธํŒ…
      • ์Šฌ๋ž™ ์ฑ„๋„ ๊ตฌ์„ฑ
      • alert ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ
  • Loki
    • loki-grafana alert ์„ธํŒ…
      • 1์ฐจ ๊ฒ€์ฆ ๊ฒฐ๊ณผ
      • Alert ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ
  • load test
    • nGrinder
      • nGrinder Test Configuration ๊ฐ’๋“ค
      • ์งˆ๋ฌธ๋ฆฌ์ŠคํŠธ
        • groovy๋Š” JUnit ์Šคํƒ€์ผ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๊ฑด๊ฐ€ ? + GTest๊ฐ€ ๋ญ”์ง€ ์ข€ ํ—ท๊ฐˆ๋ฆฐ๋‹ค
      • Script
        • Groovy Script Structure
          • reference
          • Groovy script deep dive
          • Groovy Script ์‹คํ–‰ ๊ตฌ์กฐ ๋ถ„์„
      • Test
        • [nGrinder] single endpoint load test ํ•˜๊ธฐ
          • [nGrinder] single endpoint load test script ๊ธฐ๋ฐ˜ cpu ์‚ฌ์šฉ๋Ÿ‰ ํ…Œ์ŠคํŠธ
          • [nGrinder] single endpoint load test script ๊ธฐ๋ฐ˜ pod autoscaling ํ…Œ์ŠคํŠธ
        • [nGrinder] multi endpoint load test ํ•˜๊ธฐ
          • [nGrinder] multi endpoint load test script์— ์ •์˜ํ•œ test๋“ค์ด ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณด์žฅ ๋ฐ›๋Š”๊ฐ€?
  • AWS
    • aws-cli
      • eks cluster vpc ์ŠคํŽ™๋ณด๊ธฐ
    • aws-vpc
  • EKS
    • youtube links
    • EKS best practice
    • ์งˆ๋ฌธ ์ •๋ฆฌ
  • Istio
    • Istio Basic
      • Istio ์ปดํฌ๋„ŒํŠธ ๋ณ„ ์—ญํ• 
      • Kubernetes Ingress์™€ Istio VirtualService์˜ ๊ด€๊ณ„
    • Gateway
      • Gateway ์ฃผ์š” ํŠน์ง•
      • Istio Gateway์™€ Kubernetes Ingress์˜ ์ฃผ์š” ์ฐจ์ด์ 
  • IAC
    • Terraform
      • ํ…Œ๋ผํผ ์„ค์น˜
      • ํ…Œ๋ผํผ ๋ฌธ์„œ
      • ํ…Œ๋ผํผ ๊ฐœ๋…
        • ์–ธ์–ด ๊ตฌ์กฐ
        • ์‚ฌ์šฉ ์ˆœ์„œ
        • ์ƒํƒœํŒŒ์ผ (tfstate)
        • ๋ณ€์ˆ˜ ์ •์˜ ๋ฐฉ๋ฒ•
      • Terraform - AWS VPC
    • Ansible
      • Ansible ์ดˆ๊ธฐ ํ•™์Šต ๋‚ด์šฉ
      • Ansible Playbook
      • Ansible Study
        • Inventory
        • Playbook
          • Module
        • Variable
  • etc
    • Toss SLASH24
    • Elastic Load Balancing
    • ๋‚™์„œ์žฅ
      • IRSA
    • deep dive
      • Istio ๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ
        • Overview
          • What is Istio?
          • Why choose Istio?
          • Sidecar or ambient?
        • Concepts
          • Traffic Management
        • Page
      • eks ์—์„œ control plane < - > data plane ํ†ต์‹  ์›๋ฆฌ
Powered by GitBook
On this page
  • trouble shooting
  • ์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ
  • ์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” ํ”„๋กœ์ ํŠธ url, ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” ์‹คํŒจํ•œ Job url์„ ๋ณด์—ฌ์ฃผ๋„๋ก ๊ฐœ์„ 
  • retry ์„ค์ •
  • build stage์—๋„ after script๋กœ ์‹คํŒจ์‹œ์—๋งŒ ์•Œ๋ฆผ์„ ๊ฐ€๋„๋ก ์ถ”๊ฐ€
  • common before script๋กœ loki url ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ „๋‹ฌํ•ด์„œ ๋กœ๊ทธ๋ฅผ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๊ฐœ์„ 
  • staging deploy๋ฅผ ๋Œ๋ ค๋ณด๋ฉด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ ํ™•์ธ
Edit on GitHub
  1. Gitlab

CI/CD Notifications

PreviousCI/CD YAML ๊ตฌ๋ฌธ ์ฐธ์กฐNextCI/CD slack notifiaction ๊ตฌ์ถ•์ž‘์—… ๊ฒฐ๊ณผ

Last updated 1 year ago

trouble shooting

  • auto devops basic enable

    • ํ”„๋กœ์ ํŠธ์—์„œ custom auto devops ์ฝ”๋“œ ์ œ๊ฑฐ

    • ํ”„๋กœ์ ํŠธ - ci/cd ๋ฉ”๋‰ด์—์„œ basic auto devops ์‚ฌ์šฉ enable

    • gitlab registry ์‚ฌ์šฉํ•˜๊ธฐ ( gitlab variable ์„ค์ • )

    • Docker in Docker ์—๋Ÿฌ ํ•ด๊ฒฐ ( CI/CD Settings โ†’ Runners โ†’ Enable instance runners for this project โ†’ Disable group runners )

    • branch ๋ณ„ ๋ฐฐํฌ ๋˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค

      • main ( eks dev cluster )

        • $CI_PROJECT_NAME-production

      • development ( eks dev cluster )

        • $CI_PROJECT_NAME

      • ๋‚˜๋จธ์ง€ feature ๋ธŒ๋žœ์น˜ ( play cluster )

        • $CI_PROJECT_NAME-$CI_COMMIT_REF_SLUG

  • start, finalize stage๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, finalize stage์—์„œ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์˜ ์„ฑ๊ณต์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” predefined variable์ด ์—†๊ณ  $CI_JOB_STATUS ๊ฐ’์ด ์žˆ์–ด์„œ ํ•ด๋‹น stage์˜ common after script์—์„œ ์ € ๊ฐ’์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ deploy ( review, production ) stage์—์„œ ์ตœ์ข… ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ

  • start์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด curl ๋ฏธ์„ค์น˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

    • ubuntu:latest ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  before_script์—์„œ curl ์„ค์น˜๋ฅผ ํ–ˆ์œผ๋‚˜ ์–ด์ฉ”๋• ์ด ๊ฐ„๋žตํ•œ stage์—์„œ 2๋ถ„์ด๋‚˜ ๊ฑธ๋ฆผ

    • curl ๋งŒ ์„ค์น˜๋œ base image ์ฐธ์กฐ

  • slack webhook url์ด ์—†๋Š” ์ƒํƒœ์ธ ๊ฒฝ์šฐ ๋ฐฐํฌ pipeline์ด ์•ˆ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ allow_failure : true ์ถ”๊ฐ€

    • ์„ค์ •์„ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋„ ์Šคํ‚ต๋˜๊ณ  ๋‚˜๋จธ์ง€ stage๊ฐ€ ์ง„ํ–‰๋จ

  • ๋ฉ”์‹œ์ง€ ๊ฐ„๊ฒฐํ™”

    • ๋‚ด๊ฐ€ ๊ตฌ์ƒํ•œ integration ์ฑ„๋„๋กœ ๊ฐ€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ team-prjname-integration ํ•˜๋‚˜๋กœ ์šฐ์„  ๊ฐ€์ž๊ณ  ํ•˜์…”์„œ ์ด์— ๋งž๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ๊ตฌํ˜„


์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ

์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” ํ”„๋กœ์ ํŠธ url, ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” ์‹คํŒจํ•œ Job url์„ ๋ณด์—ฌ์ฃผ๋„๋ก ๊ฐœ์„ 

  • deploy๋ฅผ ์‹คํŒจ์‹œํ‚ค๊ธฐ ์œ„ํ•ด livenessprobe๋ฅผ /๋กœ ์žก์•„๋†จ๋Š”๋ฐ api endpoint๋ฅผ ๋ฐ”๊ฟˆ

    • Liveness probe failed: HTTP probe failed with statuscode: 404

  • ๋ฉ”์‹œ์ง€ failed ํ™•์ธ ๋ฐ ๋งํฌ ๋ˆ„๋ฅผ ์‹œ ์‹คํŒจํ•œ review stage๋กœ ์ด๋™ ํ™•์ธ

    • ์ถ”ํ›„์— ์—ฌ๊ธฐ์— ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ๋ธŒ์˜ต์Šค ํ˜ธ์ถœ ํ•˜๋Š” ์‹์œผ๋กœ

    • ์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” ํ”„๋กœ์ ํŠธ url

    • ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” ์‹คํŒจํ•œ job link

    • ์‹คํŒจํ–ˆ์„ ๋•Œ ์ข€ ๋” ๋””ํ…Œ์ผ ํ•˜๊ฒŒ ์–ด๋–ค stage์ธ ์ง€ ๋ช…์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค

    • ๋ฉ”์‹œ์ง€ ํ˜•์‹ ์ตœ์ข… ์ˆ˜์ •

      • integration channel์ด ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ์žˆ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ ํŒ€ ๋ณ„๋กœ ์žˆ์„๊ฑฐ๋ผ์„œ ํŒ€์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋“ค์— ๋Œ€ํ•œ ๋„ค์ด๋ฐ์ด ์—†์œผ๋ฉด ์–ด๋–ค ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ pipeline์ด ๋™์ž‘ํ•˜๋Š” ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ž์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค

      • {ํ”„๋กœ์ ํŠธ repo ์ด๋ฆ„} {๊ฐœ๋ฐœํ™˜๊ฒฝ-prod,dev,feature branch} pipeline is started by {gitlab-user}

        • ์„ฑ๊ณต ์‹œ ํ”„๋กœ์ ํŠธ ๋งํฌ

        • ์‹คํŒจ ์‹œ ์‹คํŒจํ•œ ํŒŒ์ดํ”„๋ผ์ธ ๋งํฌ

    • ์•„๋ž˜ ๋ช…์‹œ๊ฐ€ ๋˜์–ด์žˆ๊ธด ํ•˜์ง€๋งŒ deploy ( review, production ) ๋‹จ๊ณ„ ์‹œ์ž‘ ์ „ runtime log๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ”„๋กœ์ ํŠธ ๋ณ„ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” loki url์„ ๋งŒ๋“ค์–ด์„œ ์ฒจ๋ถ€

retry ์„ค์ •

  • readinessProbe ๊ด€๋ จ ๋ฌธ์ œ๋กœ review stage๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ retry ์„ค์ •์ด ํ•„์š”ํ•ด๋ณด์ž„

  • retry: max: 2 when: - always # ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์‹คํŒจ์— ๋Œ€ํ•ด ์žฌ์‹œ๋„ ์ถ”๊ฐ€

    • ์ด๊ฑธ ํ•˜๋ฉด ํŒŒ๋“œ์—์„œ retryํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ gitlab์—์„œ retry ํ•˜๋Š” ์„ค์ • ์ด์—ˆ์Œ

  • helm values ์„ค์ •์„ ํ•ด๋ดค๋Š”๋ฐ ๋จนํžˆ์ง€ ์•Š๋Š”๋‹ค

  • auto deploy values.yaml ์ฝ”๋“œ๋ฅผ ๋ดค๋Š”๋ฐ ๊ด€๋ จ๋œ ๊ฐ’์ด ์—†์–ด์„œ ์ ์šฉ์ด ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค

livenessProbe:
  initialDelaySeconds: 30
  timeoutSeconds: 3
  periodSeconds: 5
  failureThreshold: 1
  path: /

readinessProbe:
  initialDelaySeconds: 30
  timeoutSeconds: 3
  periodSeconds: 5
  failureThreshold: 1
  path: /

build stage์—๋„ after script๋กœ ์‹คํŒจ์‹œ์—๋งŒ ์•Œ๋ฆผ์„ ๊ฐ€๋„๋ก ์ถ”๊ฐ€

  1. kaniko image์—์„œ curl์ด ์—†์–ด์„œ slack ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ

    1. nexus์— custom image๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ ํ–ˆ์ง€๋งŒ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์ด์Šˆ ๋•Œ๋ฌธ์— ํฌ๊ธฐ

    2. docker hub public repo์— push ํ•ด์„œ ์‚ฌ์šฉ ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•ด์„œ ํฌ๊ธฐ

    3. curl base imgae๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก job์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉ ์‹œ๋„

      1. on_failure: true

        1. ์•ž stage ( build ) ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ๋งŒ ๋™์ž‘ํ•˜๋„๋ก ์„ค์ •

        2. ์„ฑ๊ณต ์‹œ skip ๋˜๋Š” ๊ฒƒ ํ™•์ธ


common before script๋กœ loki url ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ „๋‹ฌํ•ด์„œ ๋กœ๊ทธ๋ฅผ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๊ฐœ์„ 

.common_before_script: &common_before_script
  before_script:
    - |
      if [[ "$CI_COMMIT_REF_NAME" == "main" ]]; then
      LOG_DOMAIN=""
      elif [[ "$CI_COMMIT_REF_NAME" == "development" ]]; then
      LOG_DOMAIN=""
      else
      LOG_DOMAIN=""
      fi
      echo "Loki domain : $LOG_DOMAIN"
      LOG_URL="$LOG_DOMAIN/explore?orgId=1&left=%7B%22datasource%22:%22LokiDataSourceName%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22editorMode%22:%22builder%22,%22expr%22:%22%7Bnamespace%3D%5C%22$KUBE_NAMESPACE%5C%22%7D%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D"
      MESSAGE=":mag_right: $CI_PROJECT_NAME deploy stage is *started* by *$GITLAB_USER_LOGIN* (<$LOG_URL|View Runtime Logs>)"
      curl -X POST -H 'Content-type: application/json' \
      --data "{\"text\":\"$MESSAGE\"}" \
      $SLACK_WEBHOOK_URL
  allow_failure: true
.common_before_script: &common_before_script
  before_script:
    - |
      if [[ -z "$SLACK_WEBHOOK_URL" ]]; then
        echo "SLACK_WEBHOOK_URL is not set. Skipping Slack notification."
      else
        if [[ "$CI_COMMIT_REF_NAME" == "main" ]]; then
          LOG_DOMAIN=""
        elif [[ "$CI_COMMIT_REF_NAME" == "development" ]]; then
          LOG_DOMAIN=""
        else
          LOG_DOMAIN=""
        fi
        echo "Loki domain : $LOG_DOMAIN"
        LOG_URL="$LOG_DOMAIN/explore?orgId=1&left=%7B%22datasource%22:%22LokiDataSourceName%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22editorMode%22:%22builder%22,%22expr%22:%22%7Bnamespace%3D%5C%22$KUBE_NAMESPACE%5C%22%7D%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D"
        MESSAGE=":rocket: $CI_PROJECT_NAME deploy stage is *started* by *$GITLAB_USER_LOGIN* (<$LOG_URL|View Runtime Logs>)"
        curl -X POST -H 'Content-type: application/json' \
        --data "{\"text\":\"$MESSAGE\"}" $SLACK_WEBHOOK_URL
        if [[ "$?" != "0" ]]; then
          echo "ERROR: Failed to send Slack notification."
          exit 1
        fi
      fi

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฒดํฌ: SLACK_WEBHOOK_URL์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  Slack ์•Œ๋ฆผ์„ ๊ฑด๋„ˆ๋œ€

  • ์‹คํŒจ ์ฒ˜๋ฆฌ: curl ๋ช…๋ น์–ด ์‹คํ–‰ ํ›„ ๋ฐ˜ํ™˜ ๊ฐ’์ด 0์ด ์•„๋‹ ๊ฒฝ์šฐ (์‹คํŒจํ•œ ๊ฒฝ์šฐ), ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒ.(exit 1). ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๋‹น ์ž‘์—…์ด ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌ.

  • allow_failure ์„ค์ •: allow_failure๋ฅผ default์ธ false๋กœ ์„ค์ •ํ•˜์—ฌ, ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํŒจ๊ฐ€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์˜ ์‹คํŒจ๋กœ ์ด์–ด์ง€๊ฒŒ ์ˆ˜์ •

์ด ๋ฐฉ์‹์„ ํ†ตํ•ด ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ๊ณ ๋Š” ๋ฌด์‹œํ•˜๊ณ , ์‹ค์ œ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํŒจํ•˜๋„๋ก ์„ค์ •. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šฌ๋ž™ ์›นํ›… URL์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฒฝ๊ณ ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์‹คํŒจ์—์„œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํŒจ ์ƒํƒœ๋กœ ๋งˆ๋ฌด๋ฆฌ๋˜์–ด ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค


staging deploy๋ฅผ ๋Œ๋ ค๋ณด๋ฉด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ ํ™•์ธ

  • ๋ชฉํ‘œ๋Š” feature ๋ธŒ๋žœ์น˜์—์„œ development๋กœ merge๋œ ๊ฒฝ์šฐ build stage๋ฅผ ์ƒ๋žตํ•˜๊ณ  ๋ฐ”๋กœ deploy๊ฐ€ ์ง„ํ–‰

  • ํ˜„์žฌ๋Š” production ( main ) ๋ธŒ๋žœ์น˜๋งŒ production stage๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ review stage ์ž„

  • staging๋„ review๋ž‘ ๋‹ค๋ฅธ ์ ์ด ๋А๊ปด์ง€์ง€ ์•Š๋Š”๋‹ค


https://hub.docker.com/r/alpine/curl