[맛침반] Github Action을 이용한 CI⁄CD 환경 구축(1) - 사전 준비

6720·2023년 12월 9일

프로젝트 맛침반

목록 보기
2/12

이번 목표

Github Action + Docker + AWS EC2를 이용하여 CI/CD 환경을 구축하기 전에 필요한 준비물을 세팅해보자!

CI/CD 구조

Github Action의 경우 yaml 파일에 입력된 내용을 토대로 동작하기 때문에 실행해야 하는 모든 명령어를 yaml 파일에 입력해야 함.

이 과정에서 중요한 정보가 그대로 노출되는 경우(특히 도커 이미지를 만드는 과정에서), 보안상의 위험이 있기 때문에 Github Secrets을 이용하여 중요한 정보를 환경변수 처리해야 함.

준비물

  • 메인 프로젝트에 이미지화에 필요한 Dockerfile 생성하기
  • EC2와 RDS(프로젝트의 DB)

진행 과정

AWS 계정 생성 후 EC2 인스턴스 생성

(해당 과정은 간단한 생성이므로 생략)
이때 키 페어는 ppk를 선택함.
나중에 pem 키가 필요하긴 하지만, 이건 ppk를 pem으로 변형할 수 있기 때문에 상관 없음.

EC2 내부에 도커 및 도커 컴포즈 설치

# 패키지 업데이트
$ sudo yum update -y
'Nothing to do'가 떴음.

# docker 설치
$ sudo yum install docker -y
Complete!

# docker 서비스 실행
$ sudo service docker start
Redirection to /bin/systemctl start docker.service

# docker 상태 확인
$ systemctl status docker.service
'Active: active'을 확인해야 함.

# 파일 권한을 읽고 쓰기로 변경하여 그룹 내에 포함된 인원도 사용할 수 있도록 변경
$ sudo chmod 666 /var/run/docker.sock

# 도커 이미지 확인
$ docker ps

# 도커 컴포즈 설치
$ sudo curl \
-L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose

# 도커 컴포즈 권한 추가
$ sudo chmod +x /usr/local/bin/docker-compose

# 트러블 슈팅#1 발생
# libxcrypt-compat: 보안 라이브러리, 시스템에서 암호 해싱과 관련된 작업을 수행하는 데 사용될 수 있음.
# 암호 관련 작업을 수행하는 프로그램이나 라이브러리가 해당 라이브러리에 의존하는 경우에 필요할 수 있음.
$ sudo dnf install libxcrypt-compat

# ec2-user를 docker 그룹에 추가
# 인스턴스 접속 후 도커 바로 제어할 수 있음.
$ sudo usermod -aG docker ec2-user

트러블 슈팅#1 [29842] Error loading Python lib …

# 트러블 슈팅
# [29842] Error loading Python lib '/tmp/_MEIw0BaIn/libpython3.7m.so.1.0': dlopen: libcrypt.so.1: cannot open shared object file: No such file or directory 오류 발생

# 다음으로 해결함.
$ sudo dnf install libxcrypt-compat

해당 에러 메시지는 'libxcrypt-compat' 패키지를 설치하면서 'libpython3.7m.so.1.0' 라이브러리를 찾지 못했기 때문에 발생한 에러이기 때문에 'libxcrypt-compat'을 설치해주면 됨.

프로젝트 도커 이미지화 전 세팅

# Dockerfile

# jdk11 이미지 시작
FROM openjdk:11-jdk

# 인자 정리 - jar
ARG JAR_FILE=build/libs/*.jar

# jar 파일 복사
COPY ${JAR_FILE} app.jar

# ENTRYPOINT: 프로세스나 애플리케이션의 주진입점 지정
# java: 가상 머신을 실행하는 자바 명령어
# -jar: jar 파일을 실행하라
# /app.jar: 실행할 jar 파일 경로
ENTRYPOINT ["java", "-jar", "/app.jar"]
# build.gradle
jar {
	enabled = false
}

RDS 생성 및 EC2 연결

(RDS 생성은 단순 생성이므로 과정 생략)

$ sudo yum install mysql

# 트러블 슈팅#2 발생

$ mysql -u 계정 -p -h Host주소

트러블 슈팅#2 Errors during downloading metadata for repository 'docker-ce-stable'

Docker CE Stable - x86_64                                                     352  B/s | 397  B     00:01
Errors during downloading metadata for repository 'docker-ce-stable':
  - Status code: 404 for https://download.docker.com/linux/centos/2023.2.20231113/x86_64/stable/repodata/repomd.xml (IP: 54.230.61.68)
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
MySQL 8.0 Community Server                                                    7.0 MB/s | 3.2 MB     00:00
MySQL Connectors Community                                                    342 kB/s |  63 kB     00:00
MySQL Tools Community                                                         2.8 MB/s | 1.1 MB     00:00
Ignoring repositories: docker-ce-stable
Error:
 Problem: conflicting requests
  - nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
  - nothing provides libssl.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
  - nothing provides libcrypto.so.10(libcrypto.so.10)(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
  - nothing provides libssl.so.10(libssl.so.10)(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
  - nothing provides libcrypto.so.10()(64bit) needed by mysql-
# 이 밑으로 해당 에러 메시지가 반복
(try to add '--skip-broken' to skip uninstallable packages)

해당 에러는 문제되는 패키지를 지우고 다시 설치함.

profile
뭐라도 하자

0개의 댓글