์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์ง€์†์  ํ†ตํ•ฉ(CI)

์ง€์†์  ํ†ตํ•ฉ(CI)์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ณ  ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ํ•„์ˆ˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค. CI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ์ž์ฃผ ๋ฐœ๊ฒฌํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ultralytics ์—์„œ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ’ˆ์งˆ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ CI ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CI ์•ก์…˜

๋‹ค์Œ์€ CI ํ™œ๋™์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค:

  • CI: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ๋ณดํ‘ธ๋ผ๊ธฐ ๊ฒ€์‚ฌ, ๋•Œ๋กœ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋”ฐ๋ผ ๋” ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ CI ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
  • ๋„์ปค ๋ฐฐํฌ: ์ด ํ…Œ์ŠคํŠธ๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ๋ฅผ ํ™•์ธํ•˜์—ฌ DockerํŒŒ์ผ ๋ฐ ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋Š์–ด์ง„ ๋งํฌ: ์ด ํ…Œ์ŠคํŠธ๋Š” markdown ๋˜๋Š” HTML ํŒŒ์ผ์—์„œ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Š์–ด์ง€๊ฑฐ๋‚˜ ์ฃฝ์€ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • CodeQL: CodeQL์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์˜๋ฏธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฐพ์•„๋‚ด๊ณ  ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” GitHub์˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • PyPi ๊ฒŒ์‹œ: ์ด ํ…Œ์ŠคํŠธ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ค๋ฅ˜ ์—†์ด ํŒจํ‚ค์ง•๋˜์–ด PyPi์— ๊ฒŒ์‹œ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

CI ๊ฒฐ๊ณผ

์•„๋ž˜๋Š” ์ฃผ์š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ CI ํ…Œ์ŠคํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ‘œ์ž…๋‹ˆ๋‹ค:

๋ฆฌํฌ์ง€ํ† ๋ฆฌ CI Docker ๋ฐฐํฌ ๋Š์–ด์ง„ ๋งํฌ CodeQL PyPi ๋ฐ ๋ฌธ์„œ ๊ฒŒ์‹œ
yolov3 YOLOv3 CI ๋„์ปค ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL
yolov5 YOLOv5 CI ๋„์ปค ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL
ultralytics ultralytics CI ๋„์ปค ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL PyPI์— ๊ฒŒ์‹œ ๋ฐ ๋ฌธ์„œ ๋ฐฐํฌ
hub HUB CI ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ
๋ฌธ์„œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ ํŽ˜์ด์ง€ ๋นŒ๋“œ ๋ฐฐํฌ

๊ฐ ๋ฐฐ์ง€์—๋Š” ํ•ด๋‹น CI ํ…Œ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. main ๋ธŒ๋žœ์น˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋ฉด ๋ฐฐ์ง€์— "์‹คํŒจ" ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ , ํ†ต๊ณผํ•˜๋ฉด "ํ•ฉ๊ฒฉ" ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•ด๋‹น ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ GitHub ์ด์Šˆ๋ฅผ ํ†ตํ•ด ๋ณด๊ณ ํ•ด ์ฃผ์‹œ๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ฑ๊ณต์ ์ธ CI ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋น„์œจ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์‹คํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋น„์œจ์ด ๋†’์„์ˆ˜๋ก ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๊ฒฐํ•จ์˜ ๋ถ€์žฌ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ฝ”๋“œ์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ํ…Œ์ŠคํŠธ์— ์˜ํ•ด ์‹คํ–‰๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

codecov.io์™€ ํ†ตํ•ฉ

Ultralytics ์—์„œ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๊ธฐ ์žˆ๋Š” ์˜จ๋ผ์ธ ํ”Œ๋žซํผ์ธ codecov.io์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋ฐ์ฝ”๋ธŒ๋Š” ์ž์„ธํ•œ ์ธ์‚ฌ์ดํŠธ, ์ปค๋ฐ‹ ๊ฐ„์˜ ์ปค๋ฒ„๋ฆฌ์ง€ ๋น„๊ต, ์ฝ”๋“œ์— ์ง์ ‘ ์‹œ๊ฐ์  ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์–ด๋–ค ์ค„์ด ์ปค๋ฒ„๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ฝ”๋ฐ์ฝ”๋ธŒ์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ์˜์—ญ์— ์ง‘์ค‘ํ•˜์—ฌ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ƒํƒœ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๋ ค๋ฉด ultralytics python ํŒจํ‚ค์ง€์—๋Š” ๋ฐฐ์ง€์™€ ํ•ด๋ฐ”๋ผ๊ธฐ ๋น„์ฃผ์–ผ์ด ํฌํ•จ๋œ ultralytics ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ. ์ด ์ด๋ฏธ์ง€๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์ปค๋ฒ„ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋น„์œจ์„ ๋ณด์—ฌ ์ฃผ๋ฉฐ, ํ…Œ์ŠคํŠธ ๋…ธ๋ ฅ์„ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://codecov.io/github/ultralytics/ultralytics ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„
ultralytics ์ฝ”๋ฐ์ฝ”๋ธŒ

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

Ultralytics ์ฝ”๋ฑ ์ด๋ฏธ์ง€



์ƒ์„ฑ๋จ 2023-11-12, ์—…๋ฐ์ดํŠธ๋จ 2023-12-03
์ž‘์„ฑ์ž: glenn-jocher (2)

๋Œ“๊ธ€