-
Notifications
You must be signed in to change notification settings - Fork 2
CI CD github to dockerhub
( 1개당 12분 소요, 7개 프로젝트를 모두 걸어놓으면 1시간이상 걸림 )
현재 프로젝트는 아래와 같은 구조로 되어있다.
TheOpenCloudEngine/uEngine-cloud-k8s
.. 서브 프로젝트
service-UI
service-api
.. 기타파일
그중 docker 로 build 를 하기 위한 DockerFile 은 각 서브 프로젝트 안에 위치하여있다.
https://hub.docker.com/ 에 가입을 하고, 최초 docker 파일을 build, push 를 하였다면,
아래와 같이 프로젝트가 생겨난다.
우리의 목표는 github 에 코드가 커밋되었을때, 자동으로 docker 이미지가 생성되도록 하는게 목적이고,
최종적으로 클라우드에 docker 이미지가 배포가 되어 운영되도록 하는 것이 목적이다.
여러가지 프로젝트중 service-api 프로젝트를 기준으로 설명한다.
우선 도커허브의 오른쪽 상단의 Account Setting 항목을 클릭한다.
아래 이미지와 같이 github 링크연결을 클릭하고, access 를 클릭하여 주면 된다.
자세한 설명은 https://docs.docker.com/docker-hub/builds/link-source/ 에서 확인가능하다.

SOURCE REPOSITORY 에 빌드하려는 타겟 프로젝트를 설정하고,
아래 하단에 Build Context 에 서브 프로젝트를 설정하여서, 해당 프로젝트를 선택하도록 하였다.
이제 save and build 버튼을 클릭하여, 정상적으로 빌드가 되는지 확인을 해보면 된다.
기존의 DockerFile 을 살펴보자.
FROM openjdk:8u111-jdk-alpine
VOLUME /tmp
ADD /target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Xmx400M","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=docker"]
기존에는 로컬에서 개발을 하여, 도커 레파지토리에 push 를 하는 식으로 개발을 하였다.
mvn package build
docker build ..
docker push ..
이런 프로세스로 흘러갔기때문에 dockerhub에서 build 를 실행시 아래와 같은 jar 파일이 없다는 에러가 뜨면서
빌드가 실패한다.
Step 1/5 : FROM openjdk:8u111-jdk-alpine
---> 3fd9dd82815c
Step 2/5 : VOLUME /tmp
---> Running in e871169d4391
Removing intermediate container e871169d4391
---> bc2f443eb70d
Step 3/5 : ADD /target/*.jar app.jar
ADD failed: no source files were specified
이를 해결하기 위하여 DockerFile 을 새로이 만들어 주고,
기존의 방법도 영향을 안미치도록 DockerFileAutoBuild 라는 파일을 생성하여 mvn build 까지
한번에 하도록 하여준다.
우선 DockerFileAutoBuild 을 만든 후 아래와 같이 mvn build 를 실행하도록 설정하여 준다.
기존과 거의 비슷하지만 MAVEN_TOOL_CHAIN 을 먼저 만들어서, build 를 한 후에
jar 파일만 copy 하는 로직으로 작성 하였다.
FROM maven:3.5.2-jdk-8-alpine AS MAVEN_TOOL_CHAIN
COPY pom.xml /tmp/
COPY src /tmp/src/
WORKDIR /tmp/
RUN mvn package install
FROM openjdk:8u111-jdk-alpine
COPY --from=MAVEN_TOOL_CHAIN /tmp/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Xmx400M","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=docker"]
이제 dockerhub build 란에서 해당 파일을 인식하도록 변경 한다.

최종적으로 build 가 성공하는 모습을 볼 수있다.
