Auto: Artifactory ๋ฐ ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” GitHub ์ž‘์—…์—์„œ ์ธ์ฆ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ ํƒ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2021๋…„ 03์›” 19์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: intuit/auto

๋ฒ„๊ทธ ์„ค๋ช…

๊ฐœ์ธ Artifactory npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ข…์†์„ฑ์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ์— ์žˆ๋Š” GitHub ์ž‘์—…์„ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๋Š” ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์นด๋‚˜๋ฆฌ์•„ ๋ฆด๋ฆฌ์Šค์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œ ๋‹จ๊ณ„ ์ž์ฒด๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๋‹ค์Œ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Screen Shot 2021-03-19 at 10 11 08 AM

๋‹ค์Œ์œผ๋กœ ๋” ์•„๋ž˜๋กœ:

Screen Shot 2021-03-19 at 10 11 53 AM

์šด์˜ ํŒ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋Ÿฌ๋„ˆ ํ™˜๊ฒฝ์— ๋ฐ˜๋“œ์‹œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋‹ค์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ž‘์—…์€ /home/ubuntu/actions-runner/_work/fe-ui/fe-ui ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • .npmrc ํŒŒ์ผ์ด ํ† ํฐ ํ•ญ๋ชฉ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • //artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/:_authToken=${NPM_TOKEN}

  • ์œ„ ํ† ํฐ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” .npmrc ํŒŒ์ผ์€ /home/ubuntu/.npmrc

์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด



์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์Šคํฌ๋ฆฐ์ƒท

ํ™˜๊ฒฝ ์ •๋ณด:


์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ

์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋” ์ด์ƒ ํ•  ๋ง์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ชจ๋“  14 ๋Œ“๊ธ€

legacyAuth๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋จผ์ € ๊ทธ๊ฒƒ์„ ๋„๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.

@hipstersmoothie ๋ ˆ๊ฑฐ์‹œ ์ธ์ฆ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ .npmrc ํŒŒ์ผ์—์„œ _auth = [token] ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ๋„๋‚˜์š”?

devops ๋‹ด๋‹น์ž์™€ ํ•จ๊ป˜ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‹ฐํŒฉํŠธ ์‚ฌ์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ:

  • ๋นŒ๋“œ ์ค‘์— ์ฃผ์ž…๋˜๋Š” env var์— ์œ ํšจํ•œ ์•„ํ‹ฐํŒฉํŠธ .npmrc๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Screen Shot 2021-03-19 at 11 32 06 AM

  • npmrc๋ฅผ ์ง์ ‘ ์„ค์ •ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ npm ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ setRcToken ๋„ false

์ถœ๋ ฅ์˜ canary ๋ช…๋ น์ด _auth ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” .autorc์—์„œ legacyAuth ๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋กœ์ปฌ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์•„ํ‹ฐํŒฉํŠธ์— ๊ฒŒ์‹œํ•˜๋Š” ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•˜๋Š” npmrc ๊ฐ€์ ธ์˜ค๊ธฐ
  2. env var์— ๋ณต์‚ฌํ•˜์‹ญ์‹œ์˜ค.
  3. ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ํ•ด๋‹น ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ~/.npmrc ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  4. setRcToken ๋ฅผ false ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@hipstersmoothie ์•„, ๋งž์•„์š”. legacyAuth๊ฐ€ ์—†์œผ๋ฉด (์ง€๊ธˆ ์ œ์•ˆ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ์œ ๋ฌผ ์ธ์Šคํ„ด์Šค์—์„œ 403 Forbidden์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— legacyAuth๋ฅผ true๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. .npmrc ํŒŒ์ผ์— ์žˆ๋Š” ํ† ํฐ ์„ธํŠธ(๋‚ด ์›๋ž˜ ๊ฒŒ์‹œ๋ฌผ์—์„œ์™€ ๊ฐ™์ด ์‹ค์ œ ํ† ํฐ์œผ๋กœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ 403์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์•„๋งˆ๋„ ์šฐ๋ฆฌ ์ž‘์—… ์„ค์ •์˜ ํ•œ๊ณ„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ํ˜ธ๊ธฐ์‹ฌ์—์„œ, ๋‹น์‹ ์˜ npmrc์— ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ์˜ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

registry = https://artifactory.internal.livongo.com/artifactory/api/npm/npm-virtual
email = [email protected]
always-auth = true
save-exact = true

๊ทธ๋Ÿฐ ๋‹ค์Œ package.json์—์„œ:

"publishConfig": {
  "registry": "https://artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/"
},

publish ๋Œ€ npm ์„ค์น˜์˜ ๊ฒฝ์šฐ URL์˜ ๋์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹ฑ ๋ ˆ์ด์–ด์šฉ Artifactory๋ฅผ ํ†ตํ•ด ์ดํ•ด๊ฐ€ ํ•„์š”ํ–ˆ์ง€๋งŒ Artifactory ์ž์ฒด์— ๋Œ€ํ•œ ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ Artifactory๋กœ ๊ฒŒ์‹œํ•  ๋•Œ ์ด๊ฒƒ์ด (legacyAuth๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ์ธ์ฆ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋กœ์ปฌ ๊ฒŒ์‹œ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์ด๋ฅผ GitHub Actions๋กœ ์˜คํ”„๋กœ๋“œํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์šด ์ข‹๊ฒŒ๋„ ๊ณต์œ  ์ž๋™ ๊ตฌ์„ฑ์—์„œ legacyAuth๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  ํŒจํ‚ค์ง€์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์นด๋‚˜๋ฆฌ์•„๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์•„์•„, ์ด์ œ legacyAuth๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๊ฒŒ์‹œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. lol.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์˜ค๋ž˜์ „์— ํ•œ ๋ฒˆ ์„ค์ •ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ทจํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ „๋‹ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ npmrc ์„ค์ •์„ ์œ„ํ•œ ๋‚ด๋ถ€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

Screen Shot 2021-03-19 at 12 01 36 PM

์ด๊ฒƒ ์™ธ์—๋Š” ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Artifactory๋Š” ํ–‰๋™ํ•˜๊ธฐ๊ฐ€ ๋‹ค์†Œ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@hipstersmoothie ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Artifactory๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์˜ณ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์—†๊ณ  devops์™€ ๊ณ„์†ํ•ด์„œ ์‹œ๋„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋„์›€์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ๊ณ„์†ํ•ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ๊ทธ ์Šคํฌ๋ฆฐ์ƒท์— ํ‘œ์‹œ๋œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์„ค์ •์„ ๋ชจ๋ฐฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ(๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์‹œํ•œ ํ›„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค) ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Artifactory์˜ ์„ค์ •์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด. ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๊ณต๊ฐœํ•˜๊ณ  ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„๋งˆ๋„ ๊ทธ ๊ณผ์ •์˜ ์ผ๋ถ€๋กœ auto์˜ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋„ค, ์ €๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์•„ํ‹ฐํŒฉํŠธ ์„ค์ • ๋‹จ๊ณ„๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๋ฉด ๋ฌธ์„œ์—๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@hipstersmoothie ์ด ์ค„์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/intuit/auto/blob/v10.21.3/plugins/npm/src/set-npm-token.ts#L37

๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ(๋‚ด๋ถ€ ์•„ํ‹ฐํŒฉํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ)์˜ ๊ฒฝ์šฐ isCi ๊ฐ€ false ์ผ ๋•Œ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์ฐธ์กฐํ•œ ๋กœ์ปฌ node_modules/@auto-it/npm/dist/set-npm-token.js ๋ผ์ธ์„ if (false) { ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด isCi ์ด true ์ผ ๋•Œ์™€ ๋™์ผํ•œ 403 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

non-ci์— ๋Œ€ํ•ด ์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ci์— ๋Œ€ํ•ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. setTokenOnCI ์ด(๊ฐ€) legacyAuth ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ๋งํ•œ ๊ณณ์„ ๋†“์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

setRcToken์„ false๋กœ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

setRcToken ๊ฐ€ false ์„ค์ •๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

@hipstersmoothie setRcToken ์„ false ์„ค์ •ํ•˜๋ฉด ๋ฐ˜์‘์ด ๋งค์šฐ ์ข‹๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ๋ฉ๋‹ˆ๋‹ค. github ์ž‘์—…์„ ํ†ตํ•ด ์•„ํ‹ฐํŒฉํŠธ์— auto ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ GO์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ!

๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž/์„ค์ • ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ง€์›์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@hipstersmoothie ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋™์•ˆ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰