CI CD/TeamCity

[TeamCity] 1. TeamCity 시작

bbyuk 2022. 5. 25. 02:11

Oracle Cloud 프리티어 인스턴스에 얹었다가 서버가 뻗어버렸다,,,

 

로그인하는데만 한 세월이 걸려서 도저히 이건 쓸 수가 없구나 싶어

회사에서 과제용으로 제공받은 AWS ec2에 Teamcity를 올려 CI/CD 파이프라인을 만들어보기로 한다.

 

AWS ec2 인스턴스 생성 과정은 생략한다.

 

추가로, 기존 Oracle Cloud에서 사용하려고 구매해둔 도메인을 여기에 연결하려고 한다.

 

1. ec2 인스턴스 생성

 

2. 방화벽 설정 ( 클라우드 방화벽 및 OS 방화벽 설정) - Oracle Cloud와 거의 동일하게 설정하면 된다.

다만 Oracle Cloud에서는 CentOS8을 사용하였고, AWS ec2에서는 RHEL 8을 사용했다.

 

3. 타임존 설정 - Oracle Cloud에서와 동일

 

4. openjdk 11버전 설치 및 환경변수 설정

 

5. nginx 설치

 

6. nginx 리버스 프록시 구성 (80포트로 요청받아 Teamcity 서비스 포트로 리버스 프록시)

 

여기까지는 Oracle Cloud에서 설정했던 것을 따라 무난하게 구성했다.

 

 

이제 Teamcity를 설치해보자.

 

설치 및 초기 환경 설정은 아래의 블로그를 참조하였다.

https://jojoldu.tistory.com/448

 

TeamCity 설치하기

최근 들어 스프링 배치를 수행하는 Runner로 젠킨스가 최선인가? 라는 의문을 계속 보게 되었습니다. (비단 배치 수행용이 아닌 배포에서도 마찬가지로) 여러 대안책을 검토 중에 젯브레인 (JetBrain

jojoldu.tistory.com

 

1. 환경

Java 8 이상 설치되어 있어야 한다고 하는데, openjdk 11을 설치했으니 넘어간다.

 

2. 설치

https://www.jetbrains.com/teamcity/download/download-thanks.html

 

Thank you for downloading TeamCity!

Continuous Integration and build server for developers and DevOps alike from JetBrains, creators of IntelliJ IDEA and ReSharper. Free professional edition available.

www.jetbrains.com

 

2.1. Teamcity 설치 링크에 들어가 링크 주소를 복사

 

2.2. wget으로 ec2에 다운로드

wget ${ link }

만약 wget이 안된다면,

yum install wget

으로 wget을 설치하자.

 

2.3. 압축 해제

tar -xzvf Teamcity-2022.04.tar.gz

압축을 풀어준다.

 

압축을 해제했으니 압축 파일 삭제

rm TeamCity-2022.04.tar.gz

 

2.4. 파일 이동 및 설정파일 디렉터리 생성

/var/lib 밑에 따로 디렉터리를 만들어 관리

mkdir /var/lib/teamcity
mv /home/ec2-user/Teamcity/* /var/lib/teamcity/

 

TeamCity의 설정 데이터들을 담아놓은 디렉터리 생성

mkdir /var/lib/teamcity/.BuildServer

 

3. 사용자 추가

Teamcity 서비스를 관리할 별도의 유저 teamcity 생성

 

# teamcity 유저 생성
useradd teamcity

# /var/lib/teamcity 의 오너를 변경
chown -R teamcity:teamcity /var/lib/teamcity/

# teamcity 유저의 홈 디렉터리를 /var/lib/teamcity/로 변경
usermod -d /var/lib/teamcity teamcity

 

4. 서비스 추가

vi /etc/init.d/teamcity
#!/bin/bash
### BEGIN INIT INFO
# Provides:          teamcity
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: TeamCity
# Description:       TeamCity
### END INIT INFO

TEAMCITY_USER=teamcity
TEAMCITY_DIR=/var/lib/teamcity
TEAMCITY_PATH=$TEAMCITY_DIR/bin/runAll.sh
TEAMCITY_DATA_DIR=$TEAMCITY_DIR/.BuildServer

case $1 in

  start)
    echo "Starting Team City"
    su - $TEAMCITY_USER -c "TEAMCITY_DATA_PATH=$TEAMCITY_DATA_DIR $TEAMCITY_PATH start"
    ;;
  stop)
    echo "Stopping Team City"
    su - $TEAMCITY_USER -c "TEAMCITY_DATA_PATH=$TEAMCITY_DATA_DIR $TEAMCITY_PATH stop"
    ;;
  restart)
    echo "Restarting Team City"
    su - $TEAMCITY_USER -c "TEAMCITY_DATA_PATH=$TEAMCITY_DATA_DIR $TEAMCITY_PATH stop"
    su - $TEAMCITY_USER -c "TEAMCITY_DATA_PATH=$TEAMCITY_DATA_DIR $TEAMCITY_PATH start"
    ;;
  *)
    echo "Usage: /etc/init.d/teamcity {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

 

스크립트 파일 실행 권한 추가

chmod +x /etc/init.d/teamcity

 

chkconfig에 teamcity 등록

chkconfig --add teamcity

 

서비스 실행

service teamcity start

 

 

리버스 프록시 설정하지 않고 Teamcity 기본 포트인 8111포트를 직접 찔러 들어간 화면.

물론 8111포트로 직접 들어가고 싶으면 ec2 클라우드 방화벽과 OS 방화벽 모두 풀어줘야 한다.

 

물론 지금은 다시 클라우드 방화벽과 OS방화벽에서 8111포트를 막고, 도메인 연결.

미리 설정해뒀던 nginx 리버스 프록시로, 클라이언트에서는 443포트를 통해서만 들어간다.

 

Teamcity 설정은 다음 포스팅에서~