Docker 설치
Ubuntu 환경이 준비되었습니다. 여기에 Docker를 먼저 설치하겠습니다.
도커 설치를 위해 필요한 패키지들을 설치합니다. 설치 명령어는 다음과 같습니다.
사전 패키지 설치
👉sudo apt update
sudo apt-get install -y ca-certificates \
curl \
software-properties-common \
apt-transport-https \
gnupg \
lsb-release
도커를 설치하기 위해 gpg Key를 다운받아야 합니다. 이는 리눅스 패키지 툴이 프로그램 패키지가 유효한지 확인하기 위해 설치 전에 gpg 키를 통해 검증하는 과정을 거치기 때문에 gpg 키를 받아야 한다고 합니다.
gpg 키 다운로드
👉sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker 설치
👉apt update를 다시 실행해주고, 아래 명령어를 통해 도커를 설치합니다. docker-compose는 추가로 설치합니다.(젠킨스 설치할 때 편하게 하기 위해 씁니다. 다른 사용법도 있는데 저는 이번에는 쓰지 않았습니다.)
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose
여기까지 하면 EC2에 도커 설치는 완료되었습니다.
젠킨스 설치(도커 컨테이너) 및 계정 생성
참고사항
docker-compose 이용 젠킨스 컨테이너 생성
👉다음은 도커에 젠킨스를 이미지를 이용해 설치해보겠습니다.
위 사진과 같이 명령어를 쳐서 docker-compose.yml 파일을 vim을 이용하여 생성해줍니다.
docker-compose.yml 파일
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /jenkins:/var/jenkins_home
ports:
- "9090:8080"
privileged: true
user: root
위 내용을 복사하여 붙여넣기합니다. 각 단어에 대한 설명은 간단하게만 하겠습니다.
- services : 컨테이너 서비스
- jenkins : 서비스 이름
- image : 컨테이너 생성시 사용할 image, 여기서는 jenkins/jenkins:lts 이미지를 사용(jenkins의 lts버전을 가져온다는 뜻)
- container_name : 컨테이너 이름
- volumes : 공유 폴더 느낌, aws의 /var/run/docker.sock와 컨테이너 내부의 /var/run/docker.sock를 연결, /jenkins 폴더와 /var/jenkins_home 폴더를 연결.
- ports : 포트 매핑, aws의 9090 포트와 컨테이너의 8080 포트를 연결한다.
- privileged : 컨테이너 시스템의 주요 자원에 연결할 수 있게 하는 것 기본적으로 False로 한다고 한다.
- user : 젠킨스에 접속할 유저 계정 (root로 할 경우 관리자)
이후 esc를 누른 후 :wq 를 입력하여 파일을 저장합니다.
sudo docker-compose up -d 명령어를 입력하여 컨테이너를 생성해줍니다.
sudo docker ps 명령어로 확인해보면 다음과 같이 컨테이너가 올라가 있는 것을 확인할 수 있습니다.
젠킨스 계정 생성 및 플러그인 설치
👉서버 공인 IP:9090 포트로 접속하면 다음과 같은 젠킨스 시작 화면이 나타나게 됩니다.
여기서 말하는 Administrator password는 sudo docker logs jenkins 명령어를 통해 위 사진의 빨간 네모 상자 안의 값을 입력해줍니다.
다음으로 두 개의 버튼 중 Install suggested plugins를 클릭해줍니다.(기본 플러그인 자동 설치 느낌, 다른 버튼은 사용자 지정 플러그인 설치 같은 느낌입니다.)
이것 저것 플러그인들이 설치되는 모습입니다.
젠킨스 계정 생성 form입니다. 적당히 입력하고 Save and Continue 버튼을 눌러줍니다.
이후 Save and Finish, Start using Jenkins 버튼을 이어서 눌러 젠킨스를 시작해줍니다.
젠킨스 시작 메인화면입니다. 플러그인 설치를 위해 jenkins 관리 탭을 클릭해줍니다.
플러그인 관리 페이지로 이동합니다.
먼저 설치 가능 탭으로 탭을 변경해주고, 검색어에 gitlab을 검색합니다.
그 후, 밑줄 친 플러그인들을 체크하고, install witout restart 버튼을 클릭해줍니다.
같은 방식으로 Docker 관련 플러그인도 설치해줍니다.
마지막으로 SSH 연결 관련 플러그인까지 설치하겠습니다.
모두 설치가 완료되었습니다.
젠킨스 프로젝트 생성 WebHook 설정, 자동 빌드 테스트
참고사항
이제, 젠킨스에서 프로젝트를 생성하고, 깃랩과 WebHook으로 연결하여 자동으로 빌드를 진행하는 것을 테스트하겠습니다.
깃랩 Repo 생성
👉깃랩 레포지토리 생성 부분은 모두 잘 알고 있을 거라고 생각하여 스킵하고, 제가 구성한 레포지토리가 어떻게 되어있는지 간단하게 설명만 하겠습니다.
여기서는 Django와 React를 이용하여 배포를 진행할 것이기 때문에 폴더로 구분지어 각각 Django, React 프로젝트를 설치해두었습니다.
testproject는 Django 프로젝트, testproject_react는 React 프로젝트입니다.
젠킨스 프로젝트 생성
👉젠킨스 메인페이지에서 새로운 item 을 클릭합니다.
프로젝트 이름은 deploytest, Freestyle project를 클릭하고 OK 버튼을 클릭합니다.
소스코드 관리 탭을 클릭하고, None로 되어있는 것을 git 라디오 버튼을 클릭하면 아래에 Form이 나타납니다.
Repository URL에는 싸피깃 레포지토리 URL을 입력해줍니다. 위 사진처럼 에러 메시지가 나타나는 것이 지금 단계에서는 정상입니다.
Credentials에서, add -> jenkins를 클릭해줍니다.
- Username : 싸피깃 아이디
- Password : 싸피킷 비밀번호
- ID : Credential 구별할 아무 텍스트 입력하면 됩니다.
위 내용 입력하고 Add 버튼 클릭합니다.
Credentials에서 이제 만들어진 Credential을 선택했을 때 오류메시지가 사라지면 성공입니다.
다음은 빌드 유발 탭입니다. 빌드 유발 탭에서는 먼저 밑줄 친 부분의 체크박스를 체크해줍니다. 그 후 생기는 고급 버튼을 클릭합니다.
그 후 조금 스크롤을 내려 Secret token을 찾아 Generate 버튼을 누르면 사진과 같이 토큰이 생성됩니다. 이 토큰은 Gitlab과 WebHook을 연결할 때 사용되니 저장해둡니다.
다음은 Build 탭입니다. Add build step를 클릭하고, Execute Shell을 선택해줍니다.
다음과 같이 명령어를 입력할 수 있는 칸이 나타납니다. 일단 연결만 테스트하는 것이기 때문에 pwd 명령어를 입력하겠습니다.
여기까지 모두 완료했다면 저장 버튼을 눌러 저장합니다.
저장 버튼을 누르면 위 사진처럼 프로젝트 화면으로 이동합니다. 일단 지금 빌드 버튼을 눌러서 젠킨스 수동 빌드를 진행해봅니다. 아래 밑줄처럼 완료 표시가 뜨면 성공한 것입니다.
빌드 히스토리에서, Console Output에 들어가보겠습니다.
빌드에 성공한 console 창입니다. 입력해두었던 명령어 pwd도 잘 작동한 것을 확인할 수 있습니다.
'AWS' 카테고리의 다른 글
[deploy]jenkins, docker 배포 참고 3 (0) | 2023.03.31 |
---|---|
[deploy]jenkins, docker 배포 참고 2 (0) | 2023.03.31 |
[deploy]AWS ec2 활용 참고 (0) | 2023.03.31 |
[docker]gradle이 mainclass를 못찾을 때 (0) | 2023.03.30 |
[AWS]ubuntu 기본 디렉토리 구조 (0) | 2023.03.30 |