다른 CI/CD 도커라이즈 예시들은 젠킨스에서 이미지 빌드를 하고 그것을 도커 레지스트리(도커 허브)에 푸시하기 때문에 젠킨스 내 도커를 설치해야했다.
하지만 나는 그저 ssh명령어로 docker를 실행할 것이기에 젠킨스내에 다커를 설치하지 않아도 된다고 판단했다.
만약 Jenkins 서버와 WAS 서버가 분리되어 있지 않는다면, 그런데 도커로 어플리케이션을 배포하고 싶다면, 거기에 CI/CD도 하고 싶다면 젠킨스 컨테이너 내에 도커가 설치되어 있어야 한다. 참고하시길!
파이프라인 명령어에서 써먹기 위한 젠킨스 내 도커 설치 방법
방법 1
: 도커파일로 젠킨스와 도커랑 같이 구동되게 하기
방법 2
: 도커 허브에 젠킨스랑 도커랑 이미 세트인거 풀받기
gcp에서 cpu 사용 너무 안한다고 서버 다른 종류로 바꾸라고 해서 바꿨다. 컨테이너를 돌릴때 해당 컴퓨터의 /var에 바인드마운트 했기 때문에 아예 초기화는 안됐다. 하지만 컨테이너가 멈췄다가 다시 시작된것이기에 로그인을 다시 해야했는데 내가 아이디를 까먹었다.ㅎㅋㅎㅋ
➡ config.xml 파일을 수정하면 로그인을 하지 않고도 젠킨스에 접속할 수 있게 해준다.
$ sudo vim /var/jenkins_home/config.xml
➡ vim 편집기로 연 xml 파일
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
.....
<useSecurity>true</useSecurity>
.....
</hudson>
➡ true부분을 false 로 바꾸기l 젠킨스 컨테이너 멈추고 재시작
$ docker stop 젠킨스_컨테이너_id
$ docker restart 젠킨스_컨테이너_id
젠킨스를 계속적으로 빌드하면 기존의 있는 컨테이너 떄문에 오류가 난다.
➡ 기존에 돌아가는 컨테이너를 멈추고 제거한 다음(이게 또 멈추기만 하면 안된다) 새로운 컨테이너를 돌렸다.
➡ 이를 위해선 돌아가는 컨테이너를 이름을 통해 아이디를 알아내어야 했다 : 참고한 링크
➡ $ docker container stop $(docker container ls -q --filter name=myapp*)
와 같이 파이프라인을 구성했더니 ssh 창에서는 잘만 실행되던게 파이프라인에서는 $()안의 명령어가 먼저 실행되면서 오류가 출력되었다.🧐
➡ 따라서 docker container ls -q --filter name=myapp*
을 원격 서버인 WAS 서버 에서 실행한다.
(파이프라인은 젠킨스 서버에서 실행되는 것이니 WAS 서버가 원격서버이다.)
➡실행한 값을 젠킨스 서버의 변수로 저장한 후 해당 변수값의 컨테이너를 멈추고 제거하는 식으로 파이프라인을 구성했다: 명령어 실행 결과 저장 참고 링크
git clone
부분에서, 공식사이트의 깃랩을 이용했을 때는 기본적인 url만 적어도 작동했는데 내 서버에 설치된 깃랩에서 pull받으려고 할때는 인증 오류가 났다.
➡ 해당 관련해서 구글링 해보니 아래와 같이 '아이디:생성한인증토큰@Clone with HTTPS' 로 파이프라인에 적어주면 된다.
git 'http://root:seCJriGN_ZjgQK8RhxpF@젠킨스아이피:8080/root/doc-wpl.git'
처음에는 그냥 이미지 태그 latest로 새로 만들고 컨테이너 돌리면 끝일 줄 알았는데 똑같은 리포지토리의 똑같은 태그로 이미지를 만들면 기존의 이미지가 <none>:<none>
으로 바뀐다.
현재 파이프라인에서는 컨테이너와 이미지 모두 지우는 것으로 되어 있다. 어플리케이션을 버전관리 필요여부에 따라 파이프라인을 변경하면 된다.
애플리케이션 버전 관리 하자!
: 이미지와 컨테이너 모두 이름을 변수값으로 살장헤사 매번 빌드할때마다 달라져야한다. 아마 이는 환경변수를 통해 설정하면 되지 않을까 싶다... 아직 확실하게 테스트해본 것은 아니라 추후에 이 부분에 대해서는 보완하자!
docker build
부분에서 태그를 'latest'와 같은 상수값이 아닌 변수로 대체하고 이전 버전의 도커 이미지를 지우지 않는다.docker run
부분에서 컨테이너 이름을 매번 다르게 지정한다(컨테이너 이름 지정은 --name 태그로!).애플리케이션 버전 관리가 필요 없다!
: 지금 파이프라인처럼 컨테이너와 이미지 파일 둘다 지우기
🥸 교훈: .ssh 폴더에 있는 파일들(키)은 권한 변경하지 말자....! 변경했다가 서버가 맛이 가서 GCP가 제공하는 ssh창이 뜨지도 않았다.