jenkins X Gitlab 연동
jenkins 관리 > 플러그인 관리 > Available plugins > "gitlab" 검색
gitlab 설치
Generic Webhook Trigger Plugin 설치
new job > freestyle 생성
소스 코드 관리
Git
Repo URL : gitlab repo 주소
Credentials > add > jenkins
Kind를 'Username with password'로 변경
UserName | gitlab 계정 아이디 |
---|---|
Password | gitlab 계정 비밀번호 |
id | Credential을 식별하는 아이디 |
Description | Credential에 대한 설명 |
Branch Specifier 설정
빌드 유발
클릭
Build Steps
Add build step > Execute shell
아래는 테스트 코드임 (나중에 도커빌드 등 코드 입력)
echo 'jenkins build started..'
저장
gitlab 접속
연동할 repo > Settings > Webhooks
gitlab에서 빨간 네모부분 작성 후 아래로 스크롤하면
Project Hooks가 생성되어 있음.
Test > push events 클릭 -> 젠킨스에서 자동 빌드 되는지 확인
Jenkins x deploy-server연동
배포서버 EC2 인스턴스로 접근하기 위해서 pem 형식의 ssh 키 생성
sudo mkdir /var/lib/jenkins/.ssh
ssh-keygen -t rsa -C "키명칭" -m PEM -P "" -f /var/lib/jenkins/.ssh/"키명칭"
ex) sudo ssh-keygen -t rsa -C "jenkins-deploy" -m PEM -P "" -f /var/lib/jenkins/.ssh/jenkins-deploy
공개키를 검색해서 복사
sudo cat /var/lib/jenkins/.ssh/jenkins-deploy.pub
ex)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDD4HoSH8EbaSRqbf7hLeIlvvn/TnWX5rxJdAJ69GTdwJWi7hwpc6VX2Em5NUHXcE2gGsgFjCNeP1WVMacc3K+F+SCi7R2mpXZh/xbNbykPjBhDc/XtsaCOcyrgO9BvVzJ5Q6NVtn5UbFr+r7/VpcMvfe9/Nn+aIk/t4ZBxs7PZFRfJxXXf/c5Is6oGYInn13hzSq9bhk52FWFG/WtK1Ymm9SLPy2lhtghcbQJ8BZ9CEIfPt8cvEopWHGIzmIMrhgMFk/iQef7Ka/QdQwJiBDEtaQfmOP8fn1Xz0IE4S1jj2s+NoZcsJDoyVlCox3zRzOKuOELZXrlOezvClCGs6j+bo//K8GLjoYg4tQaFOaXd/V2k5KzBqU7flk3ITvAnaTu0CjmzgNrHQ5l7LbhrxTP/WgNYpkxH8sJOgt7E0bbUzuYML+H7heAPZrjZQR3ktzcuDTQv0/G9hHj6ikI9C232U322MGxQmmK9xRBhTDCiqSkkQz3CFAk3X4Zi67qtwiE= jenkins-deploy
배포서버 (사전에 docker 설치)
pub키 등록
ec2 접속 후 아래 명령어 입력하여 상술한 공개키 추가하기(아랫줄에 추가)
sudo nano .ssh/authorized_keys
publish over ssh 플러그인
jenkins 관리 > 플러그인 관리 > 설치가능 탭에서 publish over ssh 플러그인 설치
jenkins 관리 > 시스템 관리 > publish over ssh 영역의 SSH servers 추가버튼 클릭
Path to Key는 Private key의 경로를 작성
/var/lib/jenkins/.ssh/jenkins-deploy
Key는 Private key 파일안의 내용을 복사 붙여넣기
sudo cat /var/lib/jenkins/.ssh/jenkins-deploy
ex)
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
Name은 접속할 ssh 서버의 이름을 작성
ex) deploy-server
hostname은 접속할 인스턴스의 주소(배포서버 ip)
ex) 52.78.76.246
username은 접속할 유저명
ex) ubuntu
Jenkins freestyle
빌드 환경 (publish over ssh 플러그인 설치를 미리해야함)
Send files or execute commands over SSH after the build runs
Name : 배포 서버 이름 입력
Exec command : 배포 서버에서 실행할 명령어 입력
sudo docker ps -q --filter name=test | grep -q . && sudo docker rm -f $(sudo docker ps -aq --filter name=test)
sudo docker rmi repo/test
sudo docker pull repo/test
sudo docker run --rm -d --name test -p 8090:8090 repo/test
Build Steps
Execute shell
cd BE
chmod +x gradlew
./gradlew clean build --exclude-task test
cd BE
docker build -t {도커 이미지} .
docker push {도커 이미지}