spring boot+gradle 프로젝트 작업중인 gitlab 브랜치가 있는데...
여기 푸시가 발생하면 자동으로 감지하고 배포하도록 cicd를 구축할 것이다.
일단 ec2에 putty를 이용하여 접속해준다.(putty아니어도 상관은 없겠지만 나는 푸티가 좋아)
사용할 포트들은 다 열어놓은 상태라고 가정.
sudo apt install openjdk-11-jdk
자바 설치하고
sudo apt-get update
sudo apt-get install docker.io
도커를 설치한다.
docker run -d --name jenkins -p 7777:8080 -v /jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts
도커를 이용해 젠킨스 컨테이너를 런 한다.
이미지 없다고 알아서 이미지도 풀 받아주고 컨테이너를 만들어준다.
ec2의 도커와 젠킨스의 도커가 같은 도커였으면 좋겠어서 옵션을 주었다.
이런 방식을 dood라고 하는것 같다.
sudo usermod -aG docker root
혹시 모르니까 도커 권한도 주기
나는 젠킨스를 7777:8080에서 돌리고 있다.
인터넷 주소창에 ip주소:7777 입력해 젠킨스에 접속한다.
docker ps로 젠킨스 컨테이너의 아이디를 확인하고,
docker exec -it 젠킨스컨테이너아이디 bash
로 젠킨스 컨테이너에 입장한다.
cat /var/jenkins_home/secrets/initialAdminPassword
위 명령어로 젠킨스의 비번을 확인한 후 그 비번을 이용해 젠킨스에 입력한다.
추천하는 플러그인을 깔아준다.
플러그인 설치 끝남
계정...적당히 생성하고
Jenkins 관리- 플러그인 매니저 들어가서
필요한것 같은 추가로 플러그인들을 설치한다.
- command agent launcher
- docker pipeline
- docker
- generic webhook trigger
- gitlab
- gitlab branch source
- oracle java se development kit installer
- publish over ssh
- ssh agent
일단 이정도 설치했음
설치 끝났으면 새로운 아이템 클릭
만듦
이름은 spring 이라고 지어주었다.
빌드 트리거에 build when a change is pushed~~ 선택해줌
이제 스크립트를 짜야한다. 오른쪽 위에 헬로월드는 기본 틀 쓰기 귀찮아서 눌러봤다..
아래 파란 글씨 pipeline syntax를 선택해서 git clone 해오는 코드를 생성하도록 하자
git 선택하고 깃랩 주소 입력
클론해올 브랜치의 이름은 develop_backend
credentials을 즉석에서 추가하기 위해 add 클릭
(미리 만들어둔게 있으면 그걸 써도 ok)
username with password로 생성해준다.
유저네임은 그냥 깃랩 유저네임이고
놀랍게도 비밀번호에 깃랩 가입 시 쓴 이메일을 입력해야 했음(이것때문에 좀 헤맸다)
내가 비번을 이메일로 한것인가 아니면 젠킨스가 깃랩가입메일을 비번으로 취급하는것인가...
방금 만든 credential을 설정해주면 에러가 없어진다.
generate pipeline script 클릭하면 코드가 생성됨
고이 복사해준다.
pipeline {
agent any
stages {
stage('gitlab clone') {
steps {
아까 생성된 코드를 복붙
}
}
stage('build') {
steps {
sh '''
chmod +x ./gradlew
./gradlew clean bootJar
'''
}
}
stage('docker image') {
steps {
sh '''
docker rmi backend || true
docker build -t backend .
'''
}
}
stage('docker run') {
steps {
sh '''
docker stop backend || true
docker rm backend || true
docker run -d --name backend -p 8080:9999 backend
'''
}
}
}
}
방금 만든 것을 활용하여 스크립트를 작성해준다.
각 스테이지에 대한 설명을 하자면
git clone 스테이지: 깃을 클론해온다.
build 스테이지: 클론해온걸 빌드한다.
docker image 스테이지: 빌드파일 가지고 이미지를 만든다. 이미지 이름은 백엔드라고 했다.
docker run 스테이지: 만든 이미지를 가지고 컨테이너를 만든다. 컨테이너 이름도 백엔드라고 했고 8080:9999에서 돌린다.
클론해올 레포의 브랜치 가서 프로젝트 루트에 도커파일을 생성한다.
FROM openjdk:11-jdk
EXPOSE 9999
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
도커파일은 초간단으로 작성함.
이 이미지는 openjdk 11을 기반으로하며
노출할 포트는 9999이고
로컬의 build/libs에 있는 jar 파일을 도커 컨테이너 내부의 /app.jar 경로로 복사한 후
컨테이너가 시작될때 java -jar /app.jar 명령어를 실행한다 뭐 이런 의미이다.
이제 '지금 빌드'를 누르면 빌드-배포가 진행되고
링크로 들어가보면 스프링의 기본 에러 문구가 떠있는 걸 볼 수 있다. (프론트단을 전혀 안만들어서 에러가 뜨고 있는 모습)
이제 내가 '지금빌드' 버튼을 안눌러도 푸시가 발생하면 알아서 빌드-배포하도록 웹훅을 설정해야함
젠킨스관리-시스템 설정 들어가서 gitlab 정보 입력
credentials은 아까랑 똑같은데 종류를 gitlab api 토큰으로 만들어줘야함
gitlab api 토큰은 gitlab 가서 만들고 값 복사해오면 됨
이제 저장하면 깃랩이랑 젠킨스랑 연결이 되었고
다시 파이프라인 설정하는데로 돌아가서 표시한 부분 url을 고이 복사해둔다.
고급을 누르고 밑으로 좀 내려보면 시크릿토큰 생성하는 버튼이 있는데, 눌러서 생성한 후 얘도 복사해둔다.
gitlab 들어가서 setting-webhook들어가고
url이랑 시크릿 토큰에 아까 복사해둔 값들을 넣는다.
그리고 푸시이벤트에 브랜치 이름도 작성
add webhook 누르면 웹훅 설정 끝
이제 develop_backend 브랜치에 푸시가 발생하면 알아서 배포가 진행된다.
일단 이렇게 간단 cicd 구축을 완료했고, 파이프라인 스크립트도 좀 다듬고,입맛에 따라 이런저런 기능을 추가하면 될 것 같다.
'개발 > 개발 방법 정리' 카테고리의 다른 글
CI/CD 어떻게 구현했는지 흐름 정리 (0) | 2023.01.28 |
---|---|
cygwin 설치 및 간단한 openmpi 실습 (0) | 2021.09.28 |
[html] 부모와 상관없이 width 100% 주기 (+가로 스크롤x) (0) | 2020.09.16 |
[React] 초간단 Fade In/Fade Out 이펙트 구현 (0) | 2020.09.16 |
댓글