본문 바로가기

Android

android with bamboo

제대로된 스크립트를 찾을 수 없어서 하루 정도 삽질을 했지만 일단 bamboo 설치 + 소스 체크아웃 + 빌드 + 에뮬 띄워서 테스트 까지는 완료 했고
배포는 원래 사용하던 배포 스크립트를 호출하면 될듯 싶다.

References
1. https://confluence.atlassian.com/bamboo/getting-started-with-java-and-bamboo-289277286.html
2. https://www.softpost.org/bamboo/adding-gradle-build-in-bamboo/
3. http://craigthomas.ca/blog/2015/06/01/android-and-bamboo-testing-using-the-android-emulator-on-a-ci-server/

일단 설치 와 소스 체크아웃은 References 로 확인 가능 하니 건너 뛰고
온라인 상에 내용이 별로 안맞는 에뮬을 띄우는 Shell 을 수정했는데 이를 먼저 보면

#!/bin/bash
export ANDROID_HOME=/Users/aucd29/Documents/android/sdk
export ANDROID_SDK_HOME=/Users/aucd29/Documents/android/sdk

EMULATOR_PORT=5556
PID_FILE="/tmp/android-emulator-$EMULATOR_PORT.pid"    # 필요없다.
LOG_FILE="/tmp/android-emulator-$EMULATOR_PORT.log"
EXEC_FILE="$ANDROID_HOME/emulator/emulator"
AVD_NAME="Pixel_2_API_28" # 따로 에뮬 생성한 이름을 입력 하면 된다.

$EXEC_FILE -avd $AVD_NAME -no-audio -no-window \
    -port $EMULATOR_PORT \
    -accel auto \
    > $LOG_FILE 2>&1 & echo $! > $PID_FILE

# 이게 중요 !!!! 기존에 돌아다니는 스크립트는 에뮬을 시작 시키고 나서 부팅이 완료될때 까지 기다려주는 코드가 없어서
# 부팅이 빨리 되었을때는 동작하였지만 그렇지 않은 경우 문제가 발생되었기에 adb 의 wait-for-device 를 통해
# 부팅이 완료되기를 기다려주는 코드를 추가 했다.
adb wait-for-device shell <<ENDSCRIPT
echo -n "Waiting for device to boot "
echo "" > /data/local/tmp/zero
getprop dev.bootcomplete > /data/local/tmp/bootcomplete
while cmp /data/local/tmp/zero /data/local/tmp/bootcomplete; do
{
    echo -n "."
    sleep 1
    getprop dev.bootcomplete > /data/local/tmp/bootcomplete
}; done
echo "Booted."
exit
ENDSCRIPT

exit 0

이후 에뮬 종료 스크립트는

export ANDROID_HOME=/Users/aucd29/Documents/android/sdk
EXEC_FILE="$ANDROID_HOME/platform-tools/adb"

$EXEC_FILE devices | grep emulator | cut -f1 | while read line; do $EXEC_FILE -s $line emu kill; done

이렇게 하면 되고

JUnit Parser 는 **/app/build/outputs/androidTest-results/connected/*.xml 를 넣으면 된다.