Jenkins on EC2 AWS

infra | 13 July 2018

Tags | CI/CD automation aws jenkins infra ec2

01 : AWS EC2 instance 띄우기

ubuntu AMI 이용해서 진행하겠다.

ssh 이용해서 EC2 instance 의 쉘로 진입한다.

02 : EC2에 jenkins 구동 환경 조성

jenkins 는 다른 서버용 프로세스들과 마찬가지로 linux 에서 demon(service) 로 실행된다.

공식 홈페이지 ubuntu 다운로드 설명 을 참조한다.

add key to use jenkins` debian package repo

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

/etc/apt/sources.list: 수정하기

아래 텍스트를 /etc/apt/sources.list: 에 추가한다. (sudo vim 을 사용해야 할 수도)

deb https://pkg.jenkins.io/debian-stable binary/

java 7 또는 8 다운로드 (java9 미지원)

jenkins 는 java 9 과 호환되지 않는다.

java 를 설치해준다.

이곳 링크 에서 ubuntu 에 java 8을 설치하는 법을 자세하게 알려준다.

03 : apt-get 에서 jenkins download

sudo apt-get update
sudo apt-get install jenkins  

04 : jenkins 서버 service (demon) 가동

아래의 명령어로 젠킨스를 실행시킨다.

sudo service jenkins start

이후 8080 포트로 웹 브라우저로 접속해 젠킨스 매니져에 진입한다.

05 : pipeline 만들기

새 프로젝트 (new pipeline) 생성

주의

프로젝트 명에 공백이 들어가면 안된다. 나중에 script 로 접근할 때 애먹는다.

순서

위에서 사용된 script 파일은 아래에 있다.

scripts

github 의 master branch 에 변경사항이 생기면 순차적으로 실행되는 두개의 script 이다.

script 1: build-push.sh

변경된 소스코드가 jenkins 에 의해 pull 되면 그 코드를 기반으로 docker image 를 새롭게 build 하고 docker hub 에 push 한다.

docker hub 계정이 있어야한다.

#!/bin/sh


USERNAME=<your username>
PASSWORD=<your password>
IMAGENAME=<choose your docker image name>
DIR=/var/lib/jenkins/workspace/<pipeline-name>/<Dockerfile name>


sudo docker login -u $USERNAME -p $PASSWORD
echo "---LOGIN SUCCEEDED---"
sudo docker build -t $USERNAME/$IMAGENAME - < $DIR
echo "---BUILD SUCCEEDED---"
sudo docker push $USERNAME/$IMAGENAME
echo "---PUSH SUCCEEDED---"

TIP : jenkins 에서 script 실행시 sudo 명령어 사용 가능하게 설정하는 법

이 링크 에 나와있는대로 조치하면 된다.

script 2: deploy.sh

docker hub 의 repository 에 푸시되어있는 새로운 도커 이미지를 원격의 웹서버에 접속해서 pull down 하는 script 이다.

원격 서버의 key 파일을 jenkins 서버 안에 가지고 있어야한다.

#/bin/sh

EC2_USER=ubuntu
SERVICE_SERVER_IP=<ip adrress of your service server>
KEY_DIR= /key/jenkins-demo.pem


ssh -i $KEY_DIR $EC2_USER@$SERVICE_SERVER_IP <<EOF
	DOCKER_USER=<your username>
	DOCKER_PASSWORD=<your password>
  IMAGENAME=<choose your docker image name>
	CONTAINER=<your container name>

	sudo docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

	sudo docker pull $DOCKER_USER/$IMAGENAME

	sudo docker stop $CONTAINER

	sudo docker run -d --rm  --name $CONTAINER  $DOCKER_USER/$IMAGENAME

EOF

06 : Github 에서 Webhook Trigger 유발하게 설정하기

pipeline 에 연결된 github repository 로 가서 Setting 의 Webhooks 로 들어간다.

여기서 Add Webhook 을 클릭하고

jenkins 서버의 주소 끝에 /github-Webhook/ 을 달아서 트리거 POST request 가 전송될 payload URL 로 지정해준다.

그 아래에는 어떤 이벤트에서 트리거를 유발할 것인지 설정할 수 있다.