ubuntu AMI 이용해서 진행하겠다.
ssh 이용해서 EC2 instance 의 쉘로 진입한다.
jenkins 는 다른 서버용 프로세스들과 마찬가지로 linux 에서 demon(service) 로 실행된다.
공식 홈페이지 ubuntu 다운로드 설명 을 참조한다.
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/
jenkins 는 java 9 과 호환되지 않는다.
java 를 설치해준다.
이곳 링크 에서 ubuntu 에 java 8을 설치하는 법을 자세하게 알려준다.
apt-get
에서 jenkins downloadsudo apt-get update
sudo apt-get install jenkins
아래의 명령어로 젠킨스를 실행시킨다.
sudo service jenkins start
이후 8080 포트로 웹 브라우저로 접속해 젠킨스 매니져에 진입한다.
프로젝트 명에 공백이 들어가면 안된다. 나중에 script 로 접근할 때 애먹는다.
위에서 사용된 script 파일은 아래에 있다.
github 의 master branch 에 변경사항이 생기면 순차적으로 실행되는 두개의 script 이다.
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---"
이 링크 에 나와있는대로 조치하면 된다.
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
pipeline 에 연결된 github repository 로 가서 Setting 의 Webhooks 로 들어간다.
여기서 Add Webhook 을 클릭하고
jenkins 서버의 주소 끝에 /github-Webhook/
을 달아서 트리거 POST request 가 전송될 payload URL 로 지정해준다.
그 아래에는 어떤 이벤트에서 트리거를 유발할 것인지 설정할 수 있다.