09
22

์•ˆ๋“œ๋กœ์ด๋“œ ์™ธ๋ถ€ ํ™˜๊ฒฝ๊ณผ ์—ฐ๋™ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ์žˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ์—ฐ๊ณ„๋œ ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๋ฉด ๋งค๋ฒˆ ์ƒˆ๋กœ ๋นŒ๋“œ ๋ฐ›์•„ ํ…Œ์ŠคํŠธ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์— ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋งค๋ฒˆ ์„ค์น˜๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋„, ๋งค๋ฒˆ ์—ฐ๊ฒฐํ•ด์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋„ ์ƒ๋‹นํžˆ ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. Github Actions๋กœ buildํ•˜์—ฌ artifacts๋กœ ๋ฝ‘์•„๋ณธ ๊ฒฝํ—˜์ด ์žˆ์—ˆ๊ธฐ์—, gitlab์˜ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ธ gitlab pipeline์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ด๋ฒˆ์— ๋„์ „ํ•ด๋ดค๋‹ค.

 

์ด๋ฒˆ์— ํ•ด๋ณผ ๊ฒƒ์€ gitlab-pipeline์œผ๋กœ  ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ build ํ•ด์„œ, artifacts๋กœ debug apk๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Windows์—์„œ ๋กœ์ปฌ ํ™˜๊ฒฝ Gitlab-Runner ์ดˆ๊ธฐ ์„ธํŒ…ํ•˜๊ธฐ

์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ํ™˜๊ฒฝ์„ ์œ„ํ•ด์„œ Docker์™€ Docker-Compose๋ฅผ ์‚ฌ์šฉํ•ด gitlab-runner๋ฅผ ์„ค์น˜ํ•  ๊ฒƒ์ด๋‹ค. docker-desktop์„ ๋จผ์ € ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.

 

docker์— ์žˆ๋Š” terminal์„ ์‚ฌ์šฉํ•  ๊ฑด๋ฐ, ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๊ฐ€ ๋™์ž‘ํ•˜๋Š” mingw64๋ฅผ ์“ฐ๊ฑฐ๋‚˜, wsl2 ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

# ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ

๋จผ์ € C๋“œ๋ผ์ด๋ธŒ๋‚˜, ์ ‘๊ทผํ•˜๊ธฐ ์‰ฌ์šด ์œ„์น˜์— gitlab runner ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

mkdir gitlab-runner
cd gitlab-runner

์ด์ œ ์—ฌ๊ธฐ๊ฐ€ gitlab-runner ์„œ๋น„์Šค๊ฐ€ ์œ„์น˜ํ•  ๊ณณ์ด๋‹ค.

vscode๋‚˜ ๋‹ค๋ฅธ ์—๋””ํ„ฐ๋กœ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ docker-compose.yml์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

version: "3"

services:
  gitlab-runner:
    container_name: gitlab-runner
    image: 'gitlab/gitlab-runner:latest'
    restart: always
    volumes:
    - './config:/etc/gitlab-runner'
    - '/var/run/docker.sock:/var/run/docker.sock'

์ตœ์‹ ๋ฒ„์ „์˜ gitlab-runner๊ฐ€ ์„ค์น˜๋˜๋Š” compose ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค. ์œ„์—์„œ ๋ถ€ํ„ฐ ์ญ‰ ๋ณด์ž.

Docker Compose ๋ฒ„์ „์„ 3์œผ๋กœ ์ง€์ •ํ•˜๊ณ , gitlab-runner๋ผ๋Š” ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์— ์‚ฌ์šฉ๋  ์ด๋ฏธ์ง€๋Š” gitlab-runner ์ตœ์‹ ๋ฒ„์ „์ด๊ณ , ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ง€๋ ๋•Œ(PC ์ข…๋ฃŒ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ) ์žฌ์‹œ์ž‘ ์˜ต์…˜์„ ๊ฑธ๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ๋งˆ์šดํŠธ ๊นŒ์ง€ ์ •์˜ํ•ด์คฌ๋‹ค. ๋ณผ๋ฅจ๋งˆ์šดํŠธ ์˜๋ฏธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
`./config:/etc/gitlab-runner`: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ config ํด๋”๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ /etc/gitlab-runner์— ๋งˆ์šดํŠธํ•œ๋‹ค.
`/var/run/docker.sock:/var/run/docker.sock`: ํ˜ธ์ŠคํŠธ์˜ Docker ์†Œ์ผ“์„ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ๋งˆ์šดํŠธํ•œ๋‹ค. ์ด๋Ÿฌ๋ฉด gitlab runnner๊ฐ€ ํ˜ธ์ŠคํŠธ docker-daemon์„ ์จ์„œ docker in docker ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ์ด๋Ÿฌ๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ํ˜ธ์ŠคํŠธ์˜ ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ข€ ๋” ํšจ์œจ์ ์ธ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

์ปดํฌ์ฆˆ ํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

docker compose up -d

Gitlab-Runner ๋“ฑ๋กํ•˜๊ธฐ

gitlab ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€์„œ, runner๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

CI/CD์„ธํŒ…์œผ๋กœ ๊ฐ€์„œ runner๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

tag๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ , unstaged jobs๋„ ์ฒดํฌํ•ด์„œ ํƒœ๊ทธ๊ฐ€ ์ง€์ •์•ˆ๋œ ci ์ž‘์—…๋„ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด gitlab-runner ๋“ฑ๋ก ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์ด๊ฑธ ๋„์ปค๋กœ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์ง€์ •ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

docker-compose exec gitlab-runner bash

docker-compose exec๋Š” ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ gitlab-runnner ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์ƒˆ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. bash ์…ธ์„ ์—ด๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์—ฌ๊ธฐ์„œ ์ € gitlab-runner register๋ฅผ ๋“ฑ๋กํ•ด์•ผ ๋„์ปค์— ์˜ฌ๋ผ๊ฐ„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊นƒ๋žฉ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

# gitlab-runner ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ shell์ด๋‹ค.
gitlab-runner register  --url gitlab ์„œ๋ฒ„ ์ฃผ์†Œ  --token ์•„๊นŒ ์žˆ๋˜ ํ† ํฐ ๊ฐ’

์•„๊นŒ ๋ช…๋ น์–ด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ญ๋ผ๋ญ๋ผ ๋‚˜์˜ค๋Š”๋ฐ, executer ๋ฅผ `docker`, docker image๋ฅผ `alpine:latest` ๋กœ ์„ค์ •ํ•˜๋Š” ์ด์™ธ์—๋Š” ๋‹ค enter  ์ณ์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋„ฃ์–ด๋„ ๋œ๋‹ค.

Android CI ํŒŒ์ผ ์ž‘์„ฑํ•˜๊ธฐ

์ฒ˜์Œ์—๋Š” ๊ตฌ๋…์ค‘์ธ ํด๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์˜ ๋™๋ฌธ์„œ๋‹ต๋งŒ ๋‚˜์™€์„œ ๊ทธ๋ƒฅ gitlab ๊ณต์‹ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Android.latest.gitlab-ci.yml

 

lib/gitlab/ci/templates/Android.latest.gitlab-ci.yml · master · GitLab.org / GitLab · GitLab

GitLab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a...

gitlab.com

์ด๊ฑฐ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ–ˆ๊ณ , ์ตœ์‹  sdk์ธ 34์— ๋งž์ท„๋‹ค.

 

๋จผ์ € ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋ก๋œ `local.properties`๊ฐ’๋“ค์„ Gitlab์—๋„ ์„ธํŒ…ํ•ด์ค˜์•ผํ•œ๋‹ค.

CI/CD ํƒญ์˜ Variables์—์„œ ์ž‘์„ฑํ•˜๋ฉด๋œ๋‹ค. ๋‹ค๋งŒ ๋‚˜์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ Mask๋ฅผ ํ™œ์„ฑํ™” ํ•  ๊ฒฝ์šฐ, value์— ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋”ฐ๊ฐ€ ymlํŒŒ์ผ ์ž‘์„ฑํ•  ๋•Œ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •์€ ๊ฐ์ž ๋ชฉ์ ์— ๋งž๊ฒŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋‚˜๋Š” ๊ทธ๋ƒฅ root ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜์‹œ์ผฐ๋‹ค.

์ด์ œ `.gitlab-ci.yml` ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์ž. ํŒŒ์ดํ”„๋ผ์ธ ์—๋””ํ„ฐ์—์„œ ๋ฐ”๋กœ ํ•ด๋„ ๋˜๊ณ , ๋กœ์ปฌPC์—์„œ ์ž‘์„ฑํ•ด์„œ ์˜ฌ๋ ค๋„ ๋œ๋‹ค.

image: eclipse-temurin:17-jdk-jammy

variables:
  ANDROID_COMPILE_SDK: "34"
  ANDROID_BUILD_TOOLS: "34.0.0"
  ANDROID_SDK_TOOLS: "9477386"

SDK34๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , gradle ๋ฒ„์ „์ด 8.7์ด๋ผ์„œ jdk๋ฒ„์ „๋„ 11์ด ์•„๋‹Œ 17๋กœ ์˜ฌ๋ ค์„œ ์‚ฌ์šฉํ•œ๋‹ค.

script๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ repository๋ฅผ ๋ณด๋ฉด, Android ํด๋”๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค. ์ฆ‰ build๋ฅผ ์ € ํด๋”๋กœ ๋“ค์–ด๊ฐ€์„œ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ before_script์— `cd Drtaa-Android`๊ฐ€ ์กด์žฌํ•œ๋‹ค.

before_script:
  - cd Drtaa-Android
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget unzip
  - export ANDROID_HOME="${PWD}/android-sdk-root"
  - install -d $ANDROID_HOME
  - wget --no-verbose --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
  - unzip -q -d "$ANDROID_HOME/cmdline-tools" "$ANDROID_HOME/cmdline-tools.zip"
  - mv -T "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/tools"
  - export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/tools/bin
  - sdkmanager --version
  - yes | sdkmanager --licenses > /dev/null || true
  - sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}"
  - sdkmanager "platform-tools"
  - sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"
  - chmod +x ./gradlew

๋‚˜๋จธ์ง€๋Š” ์˜ˆ์‹œ์— ์ ํžŒ ๋‚ด์šฉ๊ณผ ๋™์ผํ•˜๋‹ค. ์ด์ œ ๋ฌธ์ œ๋Š” variable์— ์ ์–ด๋‘” ๋ณ€์ˆ˜๋“ค์„ ๊ฐ€์ ธ์™€์„œ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด BuildConfig๋กœ ์„ค์ •ํ•ด๋‘” ๊ฐ’์ด ๋‹ค ์˜ค๋ฅ˜๋‚œ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” keystore๋ฅผ ์‚ฌ์šฉํ•˜์ง€์•Š๊ณ  local.properties์—์„œ ํ‚ค๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— local.properties ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์— ๊ฐ’์„ ์จ์ฃผ๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ๋‹ค.

  - echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties
  - echo "NAVER_MAP_CLIENT_ID=\"$NAVER_MAP_CLIENT_ID\"" >> local.properties
  - echo "NAVER_MAP_CLIENT_ID_MANIFEST=$NAVER_MAP_CLIENT_ID_MANIFEST" >> local.properties
  - echo "NAVER_MAP_CLIENT_SECRET=\"$NAVER_MAP_CLIENT_SECRET\"" >> local.properties
  - echo "NAVER_CLIENT_ID=\"$NAVER_CLIENT_ID\"" >> local.properties
  - echo "NAVER_CLIENT_SECRET=\"$NAVER_CLIENT_SECRET\"" >> local.properties
  - echo "GOOGLE_LOGIN_CLIENT_ID=\"$GOOGLE_LOGIN_CLIENT_ID\"" >> local.properties
  - echo "TOUR_API_KEY=\"$TOUR_API_KEY\"" >> local.properties
  - echo "BASE_URL=\"$BASE_URL\"" >> local.properties
  - echo "MQTT_URL=\"$MQTT_URL\"" >> local.properties
  - echo "BOOTPAY_APP_ID=\"$BOOTPAY_APP_ID\"" >> local.properties

์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ด๋‘” ๊ฐ’๋“ค์€ kotlin ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค์ด๋‹ค. ๋‚ด ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ buildConfig์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค์ด `" " `๋กœ ๊ฐ์‹ธ์ ธ์žˆ์ง€์•Š์œผ๋ฉด gradle์—์„œ ์ฝ์–ด์˜ฌ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ์•„๊นŒ variable์„ ๋„ฃ์–ด์ค„๋•Œ mask๋ฅผ ํ™œ์„ฑํ™” ํ•ด๋‘ฌ์„œ ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ชป์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•ด์คฌ๋‹ค.

์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด buildํ•  ๋•Œ๋„ `local.properties`๋ฅผ ์ƒ์„ฑํ•œ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

 

์ด์ œ job์„ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค. ๋‚ด๊ฐ€ ํ•  ์ž‘์—…์ด assembleDebug๋ผ์„œ, ์ด๋ฆ„๋„ ๋˜‘๊ฐ™์ด ๋„ฃ์–ด์คฌ๋‹ค.

assembleDebug:
  interruptible: true
  stage: build
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - Drtaa-Android/app/build/outputs/apk/debug/app-debug.apk
      - Drtaa-Android/app/build/outputs/logs/
    expire_in: 1 week

interruptible๋ฅผ true๋กœ ์ผœ์„œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ๋“ค์–ด์˜ค๋ฉด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ job์„ ์ค‘๋‹จํ•˜๊ณ  ์ƒˆ job์„ ์‹œ์ž‘ํ•˜๋„๋กํ•œ๋‹ค. 
stage: build: ์ด job์ด 'build' ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
script์—๋Š” before_script๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋  ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณณ์ด๋‹ค. ์ง€๊ธˆ์€ assembleDebug๋งŒ ์žˆ์ง€๋งŒ, detekt๊ฐ™์€ ๊ฑธ ์‹œ๋„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


artifacts์—๋Š” ์ด job์ด ์™„๋ฃŒ๋œ ํ›„ ๋ณด์กดํ•  ํŒŒ์ผ๋“ค์„ ์ •์˜ํ•ด์ฃผ๋Š”๋ฐ, ์ € paths ์— ์ ํžŒ ๊ฒฝ๋กœ์— ๋“ค์–ด๊ฐ€์„œ ํŒŒ์ผ์„ ๊ธ์–ด์˜จ๋‹ค. ๋‚˜๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ๋“ค์–ด๊ฐ€์•ผ ๋˜๋ฏ€๋กœ `Drtaa-Android/`๋ฅผ ๋„ฃ์–ด์„œ ๊ฒฝ๋กœ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด artifacts ์šฉ๋Ÿ‰์ด 1GB๋ผ์„œ ๋ณด์กด๊ธฐ๊ฐ„์„ ์ผ์ฃผ์ผ๋กœ ๋ช…์‹œํ•ด๋’€๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ์กด ๋ชฉ์ ์ด์—ˆ๋˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ฝ‘๋Š” ๊ณผ์ •์ด ์™„์„ฑ๋œ๋‹ค. ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ํด๋”์—์„œ ์ž‘์—…ํ•˜์—ฌ develop์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋„ ์ด pipeline์ด ๋Œ์•„๊ฐ„๋‹ค๋Š” ์ ์ด๋‹ค. github actions์—์„œ๋Š” workflow๋ฅผ ์„ค์ •ํ•ด์„œ ์ด๊ฑธ ๋ง‰์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” only ์˜ต์…˜์œผ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. gitlab์—๋„ workflow๊ฐ€ ์žˆ์–ด์„œ stage๋ณ„ ์ œ์–ด์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋‚˜์ค‘์— ํ™•์ธํ•˜์ž.

https://docs.gitlab.com/ee/ci/yaml/#workflow

 

CI/CD YAML syntax reference | GitLab

GitLab product documentation.

docs.gitlab.com

 

.android_changes: &android_changes
  only:
    changes:
      - Drtaa-Android/**/*

assembleDebug:
  <<: *android_changes
  interruptible: true
  stage: build
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - Drtaa-Android/app/build/outputs/apk/debug/app-debug.apk
      - Drtaa-Android/app/build/outputs/logs/
    expire_in: 1 week

์•ต์ปค๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ ํด๋”์—์„œ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ assembleDebug Job์„ ๋Œ์•„๊ฐ€๊ฒŒ ํ–ˆ๋‹ค. ์ด๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ํด๋”์—์„œ ์ž‘์—…ํ•œ ๊ฑด assembleDebug Job์„ ์‹คํ–‰์‹œํ‚ค์ง€์•Š๋Š”๋‹ค!

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT