업데이트(2021.10.11): pyenv 설정 관련 값 추가

Travis CI에서 Python과 Node.js 환경을 설정해서 Appium을 통해 테스트 및 빌드를 진행해보자.


환경 및 선수조건

  • Travis CI
  • Appium(Server+python-client)+Android의 테스트 경험(링크)


과정

Travis CI에서 Android 환경은 기본적으로 설정이 되어있기 때문에 설정되어 있는 환경을 이용하고 Appium(Node.js and Python)yml을 통해서 환경을 직접 설정 해줄 예정입니다.


  1. 안드로이드 환경 설정
    • 언어 및 기본 설정
    • SDK 및 Android 관련 설정
  2. Python 환경 설정
    • pyenv와 virtualenv 설치
    • 가상환경 설정 및 패키지 설치(pytest, Appium-Python-Client etc…)
  3. Node.js 환경 설정
    • node.js 설치
    • appium 설치
  4. Appium 실행
  5. 에뮬레이터 실행
  6. 빌드 및 테스트


1. 안드로이드 환경 설정

사용하는 Travis CI에서는 이미 안드로이드를 빌드 할 수 있는 환경을 모두 제공해줍니다. SDKbuild-tools와 기타 부가적인 부분들만 명시해주면 됩니다.

언어 및 기본 설정

.travis.yml

language: android # 언어는 android로 java가 아닙니다.
sudo: required # sudo의 경우 나중에 필요하기 때문에 required로 명시함
jdk: oraclejdk8 # 필요에 따라서 변경


SDK 및 Android 관련 설정

.travis.yml

language: android # 언어는 android로 java가 아닙니다.
sudo: required # sudo의 경우 나중에 필요하기 때문에 required로 명시함
jdk: oraclejdk8 # 필요에 따라서 변경

android:
    components:
        # 아래를 명시하면 가장 최신 Android SDK Tools를 사용
        - tools
        - platform-tools

        # 버전에 맞는 build-tools
        - build-tools-26.0.2

        # The SDK version used to compile your project
        - android-26
        - android-22
        - android-24

        # Additional components
        - extra-google-google_play_services
        - extra-google-m2repository
        - extra-android-m2repository
        - addon-google_apis-google-26

        # 사용할 시스템 이미지로 에뮬레이터를 사용하려면 적어도 하나는 꼭 명시해줘야 합니다.
        - sys-img-armeabi-v7a-android-22
        - sys-img-armeabi-v7a-android-24


2. Python 환경 설정

나중에 Appium에서 Client(테스트를 실행할 주체)를 Appium-Python-Client를 이용할거기 때문에 pyenvvirtualenv를 이용해 환경을 만들고 패키지들을 설치합니다.

pyenv와 virtualenv 설치

.travis.yml


... # 위에 안드로이드 설정하던거에 이어서

# 사용자 마음이지만 저는 before_install에 환경을 설정했습니다.
before_install:
    - sudo apt-get update

    # pyenv와 virtualenv 그리고 나중에 node.js를 위해 필요한 Ubuntu 패키지를 미리 설치
    - sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev
      libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

    # pyenv 환경 설정
    - git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    - echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    - echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    - echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
    - echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

    # virtualenv 환경 설정
    - git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
    - echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
    - source ~/.bash_profile
    - pyenv versions


가상환경 설정 및 패키지 설치

아래에 있는 requirements.txt는 패키지들의 목록으로 따로 필요하신것들만 직접 설치하셔도 됩니다.

.travis.yml


... # 위에 이어서 설정하던거에 이어서

    # 파이썬 3.6.1 설치
    - pyenv install 3.6.1

    # 가상환경 생성(가상환경 이름은 undang)
    - pyenv virtualenv 3.6.1 undang
    - pyenv activate undang
    - python -V

    # 패키지 설치
    # 필수 패키지: Appium-Python-Client, pytest
    - pip install -r requirements.txt


3. Node.js 환경 설정

node.js 설치

설치 방법은 “[Ubuntu] Ubuntu에 PPA를 통해 최신 npm 및 node.js 설치하기“를 참고하세요.

.travis.yml


... # 위에 이어서 설정하던거에 이어서

    # node.js 및 npm 설치
    - curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
    - sudo apt-get install nodejs
    - sudo apt-get install build-essential


appium 설치

.travis.yml


... # 위에 이어서 설정하던거에 이어서

    # PATH에 $JAVA_HOME/bin 추가(Appium 실행할 때 필요)
    - PATH=$PATH:$JAVA_HOME/bin

    # appium 및 appium-doctor 설치
    - npm install appium
    - npm install appium-doctor


4. Appium 실행

.travis.yml


... # 위에 이어서 설정하던거에 이어서

    # -g로 설치하지 않아서 아래처럼 직접 들어가서 appium-doctor 실행
    - "./node_modules/.bin/appium-doctor"

    # appium을 background로 실행하고 log를 appium_log.txt로 로깅
    - "./node_modules/.bin/appium --log-level info > appium_log.txt &"


5. 에뮬레이터 실행

.travis.yml


... # 위에 이어서 설정하던거에 이어서


before_script:

    # 1에서 명시한 시스템이미지로 에뮬레이터 생성
    - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a

    # 에뮬레이터 실행
    - emulator -avd test -no-skin -no-window &
    - android-wait-for-emulator
    - adb shell input keyevent 82 &


6. 빌드 및 테스트

.travis.yml


script:
    - "./gradlew assemble" # 빌드
    - pytest # 테스트

after_script:
    - cat ./appium_log.txt # appium 로그 확인


최종 .travis.yml

.travis.yml

language: android
sudo: required
jdk: oraclejdk8
android:
    components:
        - tools
        - platform-tools
        - build-tools-26.0.2
        - android-26
        - android-22
        - android-24
        - extra-google-google_play_services
        - extra-google-m2repository
        - extra-android-m2repository
        - addon-google_apis-google-26
        - sys-img-armeabi-v7a-android-22
        - sys-img-armeabi-v7a-android-24
before_install:
    - sudo apt-get update
    - sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev
      libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
    - git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    - echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    - echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    - echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
    - echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
    - git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
    - echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
    - source ~/.bash_profile
    - pyenv install 3.6.1
    - pyenv virtualenv 3.6.1 undang
    - pyenv activate undang
    - pip install -r requirements.txt
    - curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
    - sudo apt-get install nodejs
    - sudo apt-get install build-essential
    - PATH=$PATH:$JAVA_HOME/bin
    - npm install appium
    - npm install appium-doctor
    - "./node_modules/.bin/appium-doctor"
    - "./node_modules/.bin/appium --log-level info > appium_log.txt &"
before_script:
    - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
    - emulator -avd test -no-skin -no-window &
    - android-wait-for-emulator
    - adb shell input keyevent 82 &
script:
    - "./gradlew assemble"
    - pytest
after_script:
    - cat ./appium_log.txt


참고자료

Brief explanation about difference between CNAME and A record


Prior Knowledge

  • DNS(Domain Name Server)
  • Domain, IP Address
  • Let’s assume there is domain which name is test.me


CNAME

CNAME = Acronym of Canonical Name. It gives another name to specific domain name. You can easily think that it is another name of domain name

Example

 blog.test.me -> test.me // Another domain name of test.me
 www.test.me -> test.me  // Another domain name of test.me


A record

A record means domain name has One IP Address. Specific domain(include sub or root) has its own ip address. Like below sub domain can have different ip address.

Example

dev.test.me -> 123.456.789.123 // dev.test.me ip address
test.me -> 987.654.321.123     // test.me ip address


Wiki Example

Below are examples from Wikipedia. Each has different value depends on TYPE


NAME TYPE VALUE
bar.example.com CNAME foo.example.com
foo.example.com A 192.0.2.23

Set ppa and install latest npm and nodejs on Linux(Ubuntu)


Environment and Prerequisite

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • Ubuntu 19.04
  • Ubuntu 19.10
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS


What is PPA?

PPA

PPA is acronym of Personal Package Archive. It is a third party software package repository. There are many packages which are not included in Ubuntu official apt-get.

ppa-homepage


Install npm and nodejs using PPA

Set PPA

First, we need to specify repository(PPA repository). Now 20.x is the latest version of nodejs so I set to 20.x. You can check latest version on https://github.com/nodejs/Release#release-schedule

$ curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -


Install nodejs

Install nodejs

$ sudo apt-get install nodejs -y


Install build-essential

Above nodejs include npm but we need to install build-essential for using better npm.

$ sudo apt-get install build-essential -y


Reference

업데이트(2020.08.23): 설치 방법 업데이트

업데이트(2020.08.23): 참고자료 링크 업데이트

Jekyll과 GitHub Page에서 플러그인을 통해서 sitemap.xml과 feed.xml을 생성해보자


환경 및 선수조건

  • Ruby
  • Gem
  • Jekyll


설치하기 전에

  • 아래 설치할 jekyll-sitemapjekyll-feed는 블로그 프로젝트 루트에 sitemap.xml이나 feed.xml이 있다면 새로 생성하지 않습니다!
  • 두 플러그인 모두 GitHub Pages에서 공식 지원합니다. (참고: https://pages.github.com/versions/)


sitemap.xml 생성하기

(방법1) Gemfile에 jekyll-sitemap 추가 및 bundle install

  • Gemfilejekyll-sitemap을 추가합니다.

Gemfile

...
gem 'jekyll-sitemap'
...
  • 프로젝트 루트 디렉토리에서 bundle install 실행
$ bundle install


(방법2) gem을 이용해 jekyll-sitemap 설치

  • 쉘에서 아래 명령어를 통해 jekyll-sitemap을 설치합니다.
$ gem install jekyll-sitemap


_config.yml 수정

  • _config.yml 파일에서 pluginsjekyll-sitemap을 추가합니다.

config.yml

...
plugins:
    - jekyll-sitemap
...


sitemap.xml 파일 확인

  • 이제 아래처럼 로컬이나 블로그에서 도메인 뒤에 /sitemap.xml를 추가함을 통해 설정된것을 확인할 수 있습니다.
// 도메인은 각자에게 맞은 도메인으로 변경해서 테스트
http://domain/sitemap.xml



feed.xml 생성하기

(방법1) Gemfile에 jekyll-feed 추가

  • Gemfilejekyll-feed를 추가합니다.

Gemfile

...
gem 'jekyll-feed'
...
  • 프로젝트 루트 디렉토리에서 bundle install 실행
$ bundle install


(방법2) gem을 이용해 jekyll-feed 설치

  • 쉘에서 아래 명령어를 통해 jekyll-feed를 설치합니다.
$ gem install jekyll-feed


_config.yml 수정

  • _config.yml 파일에서 pluginsjekyll-feed를 추가합니다.

config.yml

...
plugins:
    - jekyll-feed
...


feed.xml 파일 확인

  • 이제 아래처럼 로컬이나 블로그에서 도메인 뒤에 /feed.xml를 추가함을 통해 설정된것을 확인할 수 있습니다.
// 도메인은 각자에게 맞은 도메인으로 변경해서 테스트
http://domain/feed.xml


참고자료

Linux(Ubuntu)에 ppa를 설정하고 최신 npm과 nodejs를 설치해보자


환경 및 선수조건

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • Ubuntu 19.04
  • Ubuntu 19.10
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS


PPA란?

PPA

오늘 사용할 PPAPersonal Package Archive의 줄임말로 우분투 공식 저장소에(apt-get을 초기에 받아오는 저장소) 없는 패키지들이 있는 저장소입니다.

ppa-homepage


PPA를 통한 npm 및 nodejs 설치

PPA 설정

우선 저장소를 명시를 해줘야합니다. 현재 20.x가 가장 최신 버전이기 때문에 20.x로 설정하였으며 https://github.com/nodejs/Release#release-schedule에서 확인 가능합니다.

$ curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -


nodejs 설치

다음 아래 명령어를 통해서 nodejs를 설치합니다.

$ sudo apt-get install nodejs -y


build-essential 설치

위에서 설치한 nodejs에 npm이 포함되어 있지만 몇개의 npm을 실행하기 위해서는 build-essential을 설치하셔야 합니다.

$ sudo apt-get install build-essential -y


참고자료