카테고리 없음

코드 커밋에서 코드를 가져오고 메이븐으로 코드를 빌드하고 도커 호스트로 배포하기

서머스 2022. 8. 2. 14:25

 

 

Services > 개발자 툴 > CodeCommit 들어간다.

 

Tomcat 대신 Docker host에 배포작업을 한다.

 

Docker 설치

#!/bin/bash
timedatectl set-timezone Asia/Seoul
hostnamectl set-hostname docker-host
amazon-linux-extras install docker -y
systemctl enable --now docker
curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
usermod -a -G docker ec2-user

 

Docker 서버와 Jenkins 인스턴스를 만든다.

 

 

 

docker와 Jenkins를 integrate한다. => plugin 필요하다.

ec2-user에 비번 준다.

 

sudo vi /etc/ssh/sshd_config

 

sudo systemctl restart sshd

key없이 들어갈 수 있다.

 

 

sudo mkdir /opt/docker
sudo vi /opt/docker/Dockerfile
FROM tomcat:9
RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
COPY ./*.war /usr/local/tomcat/webapps

컨테이너 안에서 컨테이너 안으로 복사(cp) 

webapps.dist => webapps 로 옮긴다

이슈사항

 

COPY ; 도커 호스트에 있는 것을 컨테이너 안으로 복사

 

[ec2-user@docker-host ~]$ docker run -d -p 8080:8080 --name test-tomcat tomcat:9

도커 호스트의 포트 : 컨테이너의 포트

 

 

docker.cloudywinter.shop:8080으로 접속하면

가장 상위 디렉터리에 아무 파일도 없어서 404가 뜬다.

 

[ec2-user@docker-host ~]$ docker exec -it test-tomcat bash

컨테이너 안으로 들어간다.

 

[ec2-user@docker-host ~]$ docker exec -it test-tomcat bash
root@d1e4ef1fb0a0:/usr/local/tomcat# ls
bin           conf             lib      logs            NOTICE     RELEASE-NOTES  temp     webapps.dist
BUILDING.txt  CONTRIBUTING.md  LICENSE  native-jni-lib  README.md  RUNNING.txt    webapps  work
root@d1e4ef1fb0a0:/usr/local/tomcat# cp -R webapps.dist/* webapps
root@d1e4ef1fb0a0:/usr/local/tomcat# ls webapps
docs  examples  host-manager  manager  ROOT

webapp에 카피한다.

 

다시 접속하면 그럭저럭 ? 보인다.

 

 

[ec2-user@docker-host docker]$ sudo chown -R ec2-user:ec2-user /opt/docker/

사용자명: 그룹명 

이 폴더에 한해서 ec2-user가 권한을 갖게 된다.

 

jenkins에서 플러그인을 다운받는다.

 

Dashboard > Configure System

에서 맨 밑으로 내리면 SSH Servers가 나온다.

 

[고급] 눌러서 Use password authentication, or use a different key를 체크한다.

Test Configuration을 누를 때 Success가 뜨면 성공

[저장] 한다.

 

 

도커 컨테이너에 빌드할 아이템을 만든다.

 

Copy from : 앞서 만든 프로젝트의 이름을 넣을 수 있다.

Tomcat을 안 쓸거기 때문에 x눌러서 지운다.

 

 

 

 

- remove prefix -> 필요 없는 경로 부분을 지운다 

- 명확히 하기 위해 //opt//~~~로 슬래시 두개를 둔다.

=>만약 그냥 슬래시 하나만 하면 경로가 새로 생성된다.

 

-t : tag

.을 찍으면 도커 파일을 가져와서 빌드가 된다.

container를 지운다 -> 소스코드가 바뀌게 되면 계속 동일한 작업을 반복하게 된다. => 컨테이너 이름은 똑같은걸 쓰므로 충돌이 발생하게 된다. 따라서 지워준다.

 

 

index 바꾼 뒤 커밋한다.

push origin master

 

codecommit

codebuild가 maven처럼 build 해준다.

codedeploy -> jenkins의 역할

=> 세개 다 합치면 CodePipeline

 

이 repo를 내 로컬로 가져온다.

 

복사한다.

 

그러면 자격 증명 창이 뜬다.

 

IAM - 저번에 만들었던 docker user 클릭

 

하단에 보면 HTTPS Git credentials for AWS CodeCommit 이 있다.

[자격 증명 생성] 클릭

 

이 id와 비밀번호를 입력해서 자격증명을 한다.

 

비어있는 repo라는 경고이고, 정상적으로 작동하였다.

 

디렉터리로 들어가보면, 숨겨진 폴더에 .git이 있음을 확인할 수 있다.

git init, config를 할 필요가 없다.

 

 

커밋해서 보면 올라와 있다.

 

 

Gitlab에서 Codecommit으로 마이그레이션하기

mkdir git-migration
git clone --mirror http://gitlab.cloudywinter.shop/shchoi/dev-site.git git-migration
cd git-migration/
git push -uf https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/git-test --all

기존에  clone해서 나오는것과 다르다.

 

확인해 보면 CodeCommit에 들어와 있다.

 

잰킨스에서 새로운 item을 만든다.

 

자격증명이 필요하다.

Add를 해서 추가해준다.

 

 

Username과 Password는 아까전에 다운받았던 csv 파일에서 입력한다.

 

 

뭐 대충 추가해서 커밋한 뒤 푸쉬한다. 그리고 젠킨스에서 자동 빌드가 되는지 확인해 본다.

 

 git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/git-test

 

docker.cloudywinter.shop:8080/webapp/

 

수정 후 커밋한다.

 

 

자동으로 배포가 된다.