아무거나

Jenkins + Docker 빌드/배포 or 개발환경 구축 본문

Infra/DevOps

Jenkins + Docker 빌드/배포 or 개발환경 구축

전봉근 2019. 6. 10. 15:10
반응형

 

젠킨스 서버 구축

- https://bkjeon1614.tistory.com/95 // 젠킨스 설치

- Extended Choice Parameter Plug-In 플러그인 설치

  ex ) * Extended Choice Parameter

       Name : branch

       Basic Parameter Types 체크​ 

       Parameter Type : Radio Buttons

       Number of Visible Item : 3

       Delimiter : ,

       * Choose Source for Value

       Value : dev,dev_2.5,dev_2.6

- 시스템 설정(workspace에 프로젝트별로 따로 모을경우)

  * 젠킨스 -> 환경설정 -> 홈 디렉터리(고급) -> 작업공간 최상위 디렉토리 -> ${JENKINS_HOME}/workspace/${ITEM_FULLNAME} 입력

 

도커 개발환경 구축( os초기부터 세팅 )

1. https://bkjeon1614.tistory.com/287?category=708813 // 도커 설치

 

2. sudo docker pull ubuntu:14.04  // ubuntu14.04 도커 이미지를 받아온다.

 

3. 웹 서버 환경 구축을 위하여 우선 하나의 컨테이너에 필요한 모듈 설치

   - docker run <옵션1> <옵션2> <...> <이미지이름,ID> <명령> <매개변수>

   - sudo docker run -i -t -d -p 5001:80 --name web1 ubuntu:latest /bin/bash // 5001 ~ 5003 포트를 나눌예정

   - 각 옵션들의 설명

     -i (interactive): attach 상태가 아니더라도 bash에 명령어 전달 가능.

     -t (tty): tty 모드 허용. bash 사용하려면 해주어야함.

     -d (demon 맞나..) : 데몬모드. 컨테이너가 백그라운드로 실행되게 함.

        ( *찾아보니 detach 모드이고 데몬모드라고 부르기도 한다 함.)

     -p (publish) : 호스트 포트랑 컨테이너 포트랑 연결

     --name 컨테이너 이름

     * 정확한 옵션이 궁금하면 http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter20/28 참고

  - sudo docker attach {컨테이너ID or 이름} 으로 접속하여 필요한 모듈을 설치한다.

 

4. scp를 이용한 배포 구성

- sudo docker exec -it web1 su - // 배포될 컨테이너로 접속한다.

- ubuntu 계정 생성

- public key 방식으로 배포할경우 원하는 경로에 키파일을 저장한다.

- chown ubuntu:ubuntu key.pem // 권한 확인 root소유자로 되있을 경우에 바꿔준다

 ex) 예제 코드

#!/bin/bash
echo "*** branch : $1 ***";  // $i 파라미터로 받아옴 (docker 밖에서 명령을 줄때 받을 파라미터)
rm -R /var/www/html/dev_1_1   // 명확한 scp 실행을 위하여 기존 소스폴더 삭제
scp -r -i /var/www/html/key.pem ubuntu@13.124.4.251:/usr/share/tomcat8/.jenkins/workspace/web_$1/ /var/www/html  // scp -r -i {key파일경로} {젠킨스서버계정/젠킨스서버ip:프로젝트소스경로} {배포할경로}
mv /var/www/html/web_$1 /var/www/html/dev  // 저장된 프로젝트 이름을 웹루트 폴더 네임으로 변경(기존 프로젝트 네임과 싱크를 맞춘다)
echo "***************************************";
echo "docker server deploy success!!";
echo "***************************************";

 

- sudo docker exec {배포할컨테이너이름} sh {배포를실행할sh파일경로} {파라미터로 줄 branch이름}   // 실행하여 마무리(초기 public key에 대한 승인이 필요하므로 실행시 yes입력)

  ex ) sudo docker exec web1 sh /var/www/html/deploy.sh dev

 

5. 필요한 모듈을 설치 후 해당 내용을 저장된 컨테이너 하나로 여러 서버를 복제할 예정이므로 커밋을 한다.

   - exit; // 컨테이너 접속해 있으면 나간다.

   - sudo docker commit {컨테이너ID or 이름} {생성할 이미지 이름}

     ex) sudo docker commit web1 web1_image_2017_03_20

 

6. sudo docker run -i -t -d -p 5000:80 --name {컨테이너ID or 이름} {이미지 이름}:{이미지 태그} /bin/bash -c '/usr/sbin/apache2ctl -D FOREGROUND'

   - ex) sudo docker run -i -t -d -p 5000:80 --name web1 web1_image_2017_03_20:latest /bin/bash -c '/usr/sbin/apache2ctl -D FOREGROUND'

         sudo docker run -i -t -d -p 5001:80 --name web2 web1_image_2017_03_20:latest /bin/bash -c '/usr/sbin/apache2ctl -D FOREGROUND'

         ....   // 5000포트와 5001포트로 생성

 

7. jenkins에 deploy관련 item을 만들어 execute shell란에 아래내용 작성 { 만들기 전에 jenkins build item 필요 }

#!/bin/bash
if [ -z $branch -o -z $server ];  // $branch랑 $server은 jenkins에서 플러그인활용하여 라디오버튼 선택시 받아오는 파라미터
	then
		echo "deploy failed"
	exit
fi

sudo ssh -i /usr/share/tomcat8/.jenkins/pem/key.pem ubuntu@13.124.71.176 sudo docker exec test_api_$server sh /var/www/html/test_deploy.sh ${branch}
// sudo ssh -i {key파일경로} {원격명령을내릴유저명@원격명령을내릴서버ip} {명령}

echo "***** select branch *****"
echo $branch
echo "***** select server *****"
echo $server
echo "deploy success !!!!"

 

 

추가내용 : 방화벽 설정 문제가 빈번하므로 반드시 먼저 확인후 구축해야 한다.​ 

반응형
Comments