해당 프로젝트에서 앱 개발도 들어가서, 이 앱을 자동화 빌드/배포하는 방식을 적용
jenkins 자동화 빌드/배포를 도입한 이유는 개발자가 본인 로컬에서 테스트 진행은 어려움이 없지만 해당 앱을 다수의 사용자가 테스트 진행이 필요할 경우, 로컬에서 빌드하여 apk파일을 직접 전달하여야 하는 번거러움이 있어, slack 팀채널에 올리고 필요할 경우 다운로드하여 테스트 진행을 할 수 있도록 설계
다른 회사에서 적용한것들을 보면 firebase와 fastlane을 활용하여 자동화 빌드/배포를 진행후 QA팀이나 다른 외부 팀에서 파일을 가져가 테스트를 진행. 이 부분도 추후 적용하고 싶고 적용
이유는 slack을 무료로 쓸경우 제한
https://api.slack.com/changelog/2019-03-wild-west-for-files-no-more
5GB로 제한한다고 하는데 코드가 계속 붙여질경우 금방 넘을 것 같아 일단 임시로 slack채널에 올리고 firebase의 appdistribution을 적용
먼저 jenkins를 docker로 띄워서 진행해보았는데 공식 이미지인 lts버전을 받아서 진행, 필요한 패키지가 많아서 커스터마이징을 진행
# 공식 Jenkins LTS 이미지를 기반으로 함
FROM jenkins/jenkins:lts
# root 권한으로 전환 (SDK 설치를 위해 필요)
USER root
# 필요한 패키지 설치 (wget, unzip)
RUN apt-get update && apt-get install -y wget unzip && rm -rf /var/lib/apt/lists/*
# Android SDK 설치 경로 환경 변수 설정
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV ANDROID_HOME=/opt/android-sdk
ENV PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools
# Android Command-line Tools 다운로드 및 설치
RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \
cd ${ANDROID_SDK_ROOT}/cmdline-tools && \
wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \
unzip commandlinetools-linux-9477386_latest.zip && \
rm commandlinetools-linux-9477386_latest.zip && \
mv cmdline-tools latest
# SDK Manager를 통해 필요한 컴포넌트 설치 및 라이선스 동의
RUN yes | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --licenses && \
${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --update && \
${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-30" "build-tools;30.0.3"
# /opt/android-sdk 디렉토리의 소유자를 jenkins 사용자로 변경하여 쓰기 권한 부여
RUN chown -R jenkins:jenkins ${ANDROID_SDK_ROOT}
# apt-get 업데이트 후 Python3와 pip 설치 (필요에 따라 python3-pip, python3-venv 등 추가 가능)
RUN apt-get update && \
apt-get install -y vim && \
apt-get install -y python3 python3-pip && \
rm -rf /var/lib/apt/lists/*
# (옵션) python 명령어를 python3로 대체하도록 설정 (필요 시)
# RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 10
# 필요한 도구 설치: wget, tar
RUN apt-get update && apt-get install -y wget tar && rm -rf /var/lib/apt/lists/*
# Maven 버전 및 설치 경로 설정 (원하는 버전을 사용하세요)
ENV MAVEN_VERSION=3.8.7
ENV MAVEN_HOME=/opt/maven
ENV PATH=${MAVEN_HOME}/bin:${PATH}
# Maven 다운로드 및 설치
RUN mkdir -p ${MAVEN_HOME} && \
wget --no-verbose https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz -O /tmp/maven.tar.gz && \
tar -xzf /tmp/maven.tar.gz -C ${MAVEN_HOME} --strip-components=1 && \
rm -f /tmp/maven.tar.gz
# 다시 jenkins 사용자로 전환
USER jenkins
jenkins 환경설정에서 생성한 Dockerfile 경로 설정


필요한 패키지들은 적용시켜주고, jenkins를 띄운듸 freestyle project 생성
jenkins를 gitlab webhook연동 작업


해당 secret token에 jenkins에서 생성한 토큰 기입
여기서부터 중요!!
curl -F file=@drworm.gif =F "initial_comment=I play the drums." -F channels=~ -F thread_ts=~ -H "Authorization: Bearer xoxp ~
https://api.slack.com/methods/files.upload
해당 방법으로 진행하려고 했지만, 무슨 이유인지 계속 ERROR가 뜸... 그래서 python으로 진행. python으로 진행하니 엄청 간단

slack bot 생성하는 페이지에 접속해서 필요한 권한을 주고 진행
그리고 해당 python 스크립트를 jenkins에서 실행하게 하면 됨
jenkins build step에서 execute shell에

위의 스크립트 실행 명령어를 넣어주면 됨.
가상환경에서 실행 하였고, 가상환경을 적용시켜줄려고 source ~ 로 진행하였지만 ERROR 발생....
찾아보니 jenkins:lts컨테이너 환경은 Debian으로 되어있었고, source ~ 대신 '.' 으로 진행을 함
필요한 정보들은 아래와 같음

해당 앱의 토큰.
해당 토큰에 권한을 주는 부분에서

팀 채널에 관한 쓰기 권한과, 파일에 관한 읽기,쓰기 권한 부여
이렇게 설정하고 jenkins 빌드를 진행하면 slack 팀 채널에 file upload가 가능

위 사진과 같이 jenkins빌드가 일어나면 해당 apk파일을 팀채널에 upload하여 배포를 진행
slack-api를 활용하여 앱 빌드/배포를 진행하였는데, 진행하면서 문제점이 있었다.
slack을 무료로 이용하면서 파일 업로드에 관한 제한이 있었는데, 무료 버전에서는 한번 올릴수 있는 파일용량도 제한이 있었고, slack에서 저장되는 파일용량도 제한이 있었다.
이렇게 될경우 app이 계속 개발되면서 파일 크기가 커지면 slack 채널에 upload 진행을 하지 못하게 된다.
=> 그래서 찾아본 바로는 fastlane + firebase app distribution 조합으로 많은 app 빌드/배포를 진행하는 것을 확인하였고, 추후 적용을 생각하고 있다.