AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

ํŠธ๋ผ์ด์•”, ์•ˆ๋…•ํ•˜์„ธ์š”!

BitBucket์„ ํ†ตํ•ด GitLab ๋ฐ AppCenter ํ†ตํ•ฉ์„ ์„ค์ •ํ•œ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Xamarin์—์„œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ UI ํ…Œ์ŠคํŠธ์˜ ์ž๋™ ์‹œ์ž‘์„ ์„ค์ •ํ•  ๋•Œ ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ์˜ ํ•„์š”์„ฑ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ปท ์•„๋ž˜์— ์ž์„ธํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค!

* ๋Œ€์ค‘์ด ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์กฐ๊ฑด์—์„œ UI ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ž๋ฃŒ ํ•˜๋‚˜๋งŒ ํŒŒํ—ค์ณค์–ด์š” ัั‚ะฐั‚ัŒัŽ. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‚ด ๊ธ€์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

ํƒœ์Šคํฌ: ์šฐ๋ฆฌ ํŒ€์ด GitLab์„ ๋ฒ„์ „ ์ œ์–ด ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ AppCenter์—์„œ UI ํ…Œ์ŠคํŠธ์˜ ์ž๋™ ์‹œ์ž‘์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ AppCenter๋Š” GitLab๊ณผ ์ง์ ‘ ํ†ตํ•ฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. BitBucket์„ ํ†ตํ•œ ์šฐํšŒ๊ฐ€ ์†”๋ฃจ์…˜ ์ค‘ ํ•˜๋‚˜๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„

1. BitBucket์— ๋นˆ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๊ฑด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™๋„ค์š” :)

2. GitLab ์„ค์ •

์ €์žฅ์†Œ์— ํ‘ธ์‹œ/๋ณ‘ํ•ฉํ•  ๋•Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ BitBucket์— ์—…๋กœ๋“œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์‹คํ–‰๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด .gitlab-ci.yml ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์„ธ์š”.

๋จผ์ € before_scripts ์„น์…˜์— ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 - git config --global user.email "user@email"
 - git config --global user.name "username"

๊ทธ๋Ÿฐ ๋‹ค์Œ ์›ํ•˜๋Š” ๋‹จ๊ณ„์— ๋‹ค์Œ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

- git push --mirror https://username:[email protected]/username/projectname.git

๋‚ด ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

before_script:
 - git config --global user.email "user@email"
 - git config --global user.name "username"

stages:
  - mirror
mirror:
  stage: mirror
  script:
    - git push --mirror https://****:*****@bitbucket.org/****/testapp.git

๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ/ํŒŒ์ผ์ด BitBucket์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
* ์‹ค์Šต์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด SSH ํ‚ค ์„ค์ •์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•ด ์•„๋ž˜์—์„œ SSH๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SSH๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ

๋จผ์ € SSH ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.
์ƒ์„ฑ๋œ ํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

๋‹ค์Œ ๋น„๋ฐ€ ํ‚ค GitLab์— ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์„ค์ • > CI/CD > ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€ ํ‚ค๋ฅผ ์ €์žฅํ•œ ํŒŒ์ผ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๋ณ€์ˆ˜ SSH_PRIVATE_KEY๋ฅผ ํ˜ธ์ถœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
* ์ด ํŒŒ์ผ์€ ๊ณต๊ฐœ ํ‚ค ํŒŒ์ผ๊ณผ ๋‹ฌ๋ฆฌ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ BitBucket์— ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ๋ฅผ ์—ด๊ณ  ์„ค์ • > ์•ก์„ธ์Šค ํ‚ค๋กœ ์ด๋™ํ•˜์„ธ์š”.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

์—ฌ๊ธฐ์—์„œ ํ‚ค ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๊ณต๊ฐœ ํ‚ค๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ(ํ™•์žฅ์ž๊ฐ€ .pub์ธ ํŒŒ์ผ)์˜ ๋‚ด์šฉ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” gitlab-runner์˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋˜ ๋ณ„ํ‘œ๋ฅผ ์„ธ๋ถ€ ์ •๋ณด๋กœ ๋ฐ”๊พธ์„ธ์š”.

image: timbru31/node-alpine-git:latest

stages:
  - mirror

before_script:
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  - git config --global user.email "*****@***"
  - git config --global user.name "****"
  - ssh -T [email protected]

mirror:
  stage: mirror
  script:
    - git push --mirror https://****:****@bitbucket.org/*****/*****.git

3. AppCenter ์„ค์ •

AppCenter์—์„œ ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

์–ธ์–ด/ํ”Œ๋žซํผ ์ง€์ •

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

๋‹ค์Œ์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋นŒ๋“œ ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ BitBucket๊ณผ 1๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋นŒ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์•„์ด์ฝ˜์„ ์ฐพ์œผ์„ธ์š”.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

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

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ๋‹น์—ฐํžˆ ๋ชจ๋“  ์ผ์ด ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์—… ์ค‘์— ๋ฐœ์ƒํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

'ssh-keygen'์€ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ๋ช…๋ น์œผ๋กœ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ssh-keygen.exe ๊ฒฝ๋กœ๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค: ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— C:Program FilesGitusrbin์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜(๋จธ์‹ ์„ ์žฌ๋ถ€ํŒ…ํ•œ ํ›„ ์ ์šฉ๋จ) ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฝ˜์†”์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

AppCenter๊ฐ€ ์ž˜๋ชป๋œ BitBucket ๊ณ„์ •์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด AppCenter์—์„œ BitBucket ๊ณ„์ •์˜ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ BitBucket ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•˜๊ณ  ์‚ฌ์šฉ์ž ํ”„๋กœํ•„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

๋‹ค์Œ์œผ๋กœ ์„ค์ • > ์ ‘๊ทผ ๊ด€๋ฆฌ > OAuth๋กœ ์ด๋™ํ•˜์„ธ์š”.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

๊ณ„์ • ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๋ ค๋ฉด ์ทจ์†Œ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ BitBucket ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
* ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋„ ์ง€์šฐ์‹ญ์‹œ์˜ค.

์ด์ œ AppCenter๋กœ ์ด๋™ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ BitBucket ๊ณ„์ • ์—ฐ๊ฒฐ ๋Š๊ธฐ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

AppCenter ๋ฐ GitLab ํ†ตํ•ฉ

์ด์ „ ๊ณ„์ •์˜ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜๋ฉด AppCenter๋ฅผ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์›ํ•˜๋Š” ๊ณ„์ •์œผ๋กœ ์ด๋™ํ•˜์„ธ์š”.

'eval'์€ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ๋ช…๋ น์œผ๋กœ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ช…๋ น ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  - eval $(ssh-agent -s)

ํŒ€:

  - ssh-agent

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” C:Program FilesGitusrbinssh-agent.exe์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋Ÿฌ๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋จธ์‹ ์˜ ์‹œ์Šคํ…œ ๋ณ€์ˆ˜์— ์ด ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AppCenter ๋นŒ๋“œ๊ฐ€ ์˜ค๋ž˜๋œ bitBucket ์ €์žฅ์†Œ์—์„œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ์—ฌ๋Ÿฌ ๊ณ„์ •์œผ๋กœ ์ž‘์—…์„ ํ•˜๋‹ค๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ง€์šฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€