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
๊ณผ(์) ๊ฐ์ ๋ค๋ฅธ ๋ถ๊ธฐ๋ก ํธ์ํ๋ฉด ์งํ ์ค์ธ ์คํ์ด ์ทจ์๋ฉ๋๋ค.
Monitoring your current jobs in your organization or enterprise
๋์์ฑ ๋๋ ํ๊ฐ ์๋ ์ ์ฝ ์กฐ๊ฑด์ ์๋ณํ๋ ค๋ฉด ์กฐ์ง ๋๋ ์ํฐํ๋ผ์ด์ฆ์์ GitHub ํธ์คํ ์คํ๊ธฐ์์ ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ์์ ์๋ฅผ ํ์ธํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ "ํ์ฌ ์์ ๋ชจ๋ํฐ๋ง"์(๋ฅผ) ์ฐธ์กฐํ์ธ์.