Skip to main content

์ด ๋ฒ„์ „์˜ GitHub Enterprise Server๋Š” ๋‹ค์Œ ๋‚ ์งœ์— ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. 2024-09-24. ์ค‘์š”ํ•œ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋„ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ, ํ–ฅ์ƒ๋œ ๋ณด์•ˆ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์ตœ์‹  ๋ฒ„์ „์˜ GitHub Enterprise Server๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋Œ€ํ•œ ๋„์›€๋ง์€ GitHub Enterprise ์ง€์›์— ๋ฌธ์˜ํ•˜์„ธ์š”.

Control the concurrency of workflows and jobs

Run a single job at a time.

์ด ๋ฌธ์„œ์˜ ๋‚ด์šฉ

์ฐธ๊ณ : GitHub ํ˜ธ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋Š” ํ˜„์žฌ GitHub Enterprise Server์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GitHub public roadmap์— ์˜ˆ์ •๋œ ํ–ฅํ›„ ์ง€์›์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Overview

By default, GitHub Actions allows multiple jobs within the same workflow, multiple workflow runs within the same repository, and multiple workflow runs across a repository owner's account to run concurrently. This means that multiple workflow runs, jobs, or steps can run at the same time.

GitHub Actions also allows you to control the concurrency of workflow runs, so that you can ensure that only one run, one job, or one step runs at a time in a specific context. This can be useful for controlling your account's or organization's resources in situations where running multiple workflows, jobs, or steps at the same time could cause conflicts or consume more Actions minutes and storage than expected.

For example, the ability to run workflows concurrently means that if multiple commits are pushed to a repository in quick succession, each push could trigger a separate workflow run, and these runs will execute concurrently.

Using concurrency in different scenarios

jobs.<job_id>.concurrency๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ผ ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ๋งŒ ํ•œ ๋ฒˆ์— ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ๊ทธ๋ฃน์€ ๋ชจ๋“  ๋ฌธ์ž์—ด ๋˜๋Š” ์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ์–ธ์–ด ์‹ ์ปจํ…์ŠคํŠธ: github, inputs, vars, needs, strategy, matrix. ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ โ€œEvaluate expressions in workflows and actionsโ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์›Œํฌํ”Œ๋กœ ์ˆ˜์ค€์—์„œ concurrency๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ concurrency๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ๋„ ์ทจ์†Œํ•˜๋ ค๋ฉด cancel-in-progress: true๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด๋‚˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ์กฐ๊ฑด๋ถ€ ์ทจ์†Œํ•˜๋ ค๋ฉด, ํ—ˆ์šฉ๋œ ๋ชจ๋“  ์‹ ์ปจํ…์ŠคํŠธ์—์„œ cancel-in-progress์„(๋ฅผ) ์‹์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ :

  • ๋™์‹œ์„ฑ ๊ทธ๋ฃน ์ด๋ฆ„์€ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด prod ๋ฐ Prod๋Š” ๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋™์‹œ์„ฑ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์— ๋Œ€ํ•ด์„œ๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์—์„œ ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์€ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: ๋™์‹œ์„ฑ ๋ฐ ๊ธฐ๋ณธ ๋™์ž‘ ์‚ฌ์šฉ

GitHub Actions์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ ์—ฌ๋Ÿฌ ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. concurrency ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์˜ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด์ด ์ •์˜๋œ ์งํ›„์— concurrency ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์ „์ฒด ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์˜ ๋™์‹œ์„ฑ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

on:
  push:
    branches:
      - main

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

์ž‘์—… ์ˆ˜์ค€์—์„œ concurrency ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ๋‚ด์—์„œ ์ž‘์—…์˜ ๋™์‹œ์„ฑ์„ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

on:
  push:
    branches:
      - main

jobs:
  job-1:
    runs-on: ubuntu-latest
    concurrency:
      group: example-group
      cancel-in-progress: true

์˜ˆ: ๋™์‹œ์„ฑ ๊ทธ๋ฃน

๋™์‹œ์„ฑ ๊ทธ๋ฃน์€ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๋˜๋Š” ๋™์ผํ•œ ๋™์‹œ์„ฑ ํ‚ค๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ž‘์—…์˜ ์‹คํ–‰์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด concurrency ํ‚ค๋Š” ์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—…์„ ํ•จ๊ป˜ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. concurrency ํ‚ค๋ฅผ ์ •์˜ํ•  ๋•Œ GitHub Actions์€(๋Š”) ์ง€์ •๋œ ์‹œ๊ฐ„์— ํ•ด๋‹น ํ‚ค๋ฅผ ๊ฐ€์ง„ ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—…๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ž‘์—…์ด ๋™์ผํ•œ concurrency ํ‚ค๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ GitHub Actions์€(๋Š”) ํ•ด๋‹น ํ‚ค๋กœ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. concurrency ํ‚ค๋Š” ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜ ์ปจํ…์ŠคํŠธ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋™์  ์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—…์ด ๋™์‹œ์„ฑ ๊ทธ๋ฃน์˜ ์ผ๋ถ€๊ฐ€ ๋˜๋„๋ก ์›Œํฌํ”Œ๋กœ์—์„œ ๋™์‹œ์„ฑ ์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๋˜๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜๋ฉด GitHub๋Š” ๋™์ผํ•œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์—์„œ ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๋˜๋Š” ์ž‘์—…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํŠน์ • ์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—… ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•˜๋ ค๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ job-1์€ ์ด๋ฆ„์ด staging_environment์ธ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ƒˆ๋กœ ์‹คํ–‰๋œ job-1์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋ฉด staging_environment ๋™์‹œ์„ฑ ๊ทธ๋ฃน์—์„œ ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ๋™์ผํ•œ ์ž‘์—…์˜ ์‹คํ–‰์ด ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.

jobs:
  job-1:
    runs-on: ubuntu-latest
    concurrency:
      group: staging_environment
      cancel-in-progress: true

๋˜๋Š” ์›Œํฌํ”Œ๋กœ์—์„œ ๋™์  ์‹(์˜ˆ: concurrency: ci-${{ github.ref }})์„ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํฌํ”Œ๋กœ ๋˜๋Š” ์ž‘์—…์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•œ ๋ถ„๊ธฐ ๋˜๋Š” ํƒœ๊ทธ์˜ ์ฐธ์กฐ ์•ž์— ์ด๋ฆ„์ด ci-์ธ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ์ด์ „ ์‹คํ–‰์ด ์ง„ํ–‰ ์ค‘์ธ ๋™์•ˆ ์ƒˆ ์ปค๋ฐ‹์ด ๊ธฐ๋ณธ ๋ถ„๊ธฐ์— ํ‘ธ์‹œ๋˜๋ฉด ์ด์ „ ์‹คํ–‰์ด ์ทจ์†Œ๋˜๊ณ  ์ƒˆ ์ปค๋ฐ‹์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

on:
  push:
    branches:
      - main

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

์˜ˆ: ๋™์‹œ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… ๋˜๋Š” ์‹คํ–‰ ์ทจ์†Œ

๋™์‹œ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub Actions์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… ๋˜๋Š” ์‹คํ–‰์„ ์ทจ์†Œํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •๋œ cancel-in-progress ์˜ต์…˜์„ ํ†ตํ•ด concurrency ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

์ด ์˜ˆ์ œ์—์„œ๋Š” ํŠน์ • ๋™์‹œ์„ฑ ๊ทธ๋ฃน์„ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  GitHub Actions์€(๋Š”) ์ง„ํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ž‘์—… ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: ๋Œ€์ฒด ๊ฐ’ ์‚ฌ์šฉ

ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜๋Š” ์†์„ฑ์œผ๋กœ ๊ทธ๋ฃน ์ด๋ฆ„์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒด ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด github.head_ref๋Š” pull_request ์ด๋ฒคํŠธ์—์„œ๋งŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ๊ฐ€ pull_request ์ด๋ฒคํŠธ ์™ธ์— ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์—๋„ ์‘๋‹ตํ•˜๋Š” ๊ฒฝ์šฐ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์ฒด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์€ pull_request ์ด๋ฒคํŠธ์—์„œ๋งŒ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… ๋˜๋Š” ์‹คํ–‰์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. github.head_ref๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์€ ์‹คํ–‰์— ๊ณ ์œ ํ•˜๊ณ  ์ •์˜๋œ ์‹คํ–‰ ID๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

์˜ˆ: ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•ด์„œ๋งŒ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… ๋˜๋Š” ์‹คํ–‰ ์ทจ์†Œ

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

๋™์ผํ•œ ์›Œํฌํ”Œ๋กœ์˜ ์ง„ํ–‰ ์ค‘์ธ ์‹คํ–‰๋งŒ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด github.workflow ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ๊ทธ๋ฃน์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

์˜ˆ: ํŠน์ • ๋ถ„๊ธฐ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…๋งŒ ์ทจ์†Œ

ํŠน์ • ๋ถ„๊ธฐ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…๋งŒ ์ทจ์†Œํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ทจ์†Œํ•˜์ง€ ์•Š๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, cancel-in-progress์„(๋ฅผ) ํฌํ•จํ•œ ์กฐ๊ฑด์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ ๋ถ„๊ธฐ์—์„œ๋งŒ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ทจ์†Œํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ์—์„œ๋Š” ์ทจ์†Œํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ์—์„œ ์‹คํ–‰ ์ค‘์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ์˜ ์ง„ํ–‰ ์ค‘์ธ ์‹คํ–‰๋งŒ ์ทจ์†Œํ•˜๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ์‹์— ๋Œ€ํ•˜์—ฌ cancel-in-progress์„(๋ฅผ) ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ !contains(github.ref, 'release/')}}

์ด ์˜ˆ์‹œ์—์„œ๋Š” release/1.2.3 ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ํ‘ธ์‹œ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์ง„ํ–‰ ์ค‘์ธ ์‹คํ–‰์„ ์ทจ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. main๊ณผ(์™€) ๊ฐ™์€ ๋‹ค๋ฅธ ๋ถ„๊ธฐ๋กœ ํ‘ธ์‹œํ•˜๋ฉด ์ง„ํ–‰ ์ค‘์ธ ์‹คํ–‰์ด ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.