시행착오들

bob_ssso·2021년 7월 9일
0

CI/CD

목록 보기
10/10

🥸 문제 1. 어떤 젠킨스 이미지?


다른 CI/CD 도커라이즈 예시들은 젠킨스에서 이미지 빌드를 하고 그것을 도커 레지스트리(도커 허브)에 푸시하기 때문에 젠킨스 내 도커를 설치해야했다.

하지만 나는 그저 ssh명령어로 docker를 실행할 것이기에 젠킨스내에 다커를 설치하지 않아도 된다고 판단했다.

만약 Jenkins 서버와 WAS 서버가 분리되어 있지 않는다면, 그런데 도커로 어플리케이션을 배포하고 싶다면, 거기에 CI/CD도 하고 싶다면 젠킨스 컨테이너 내에 도커가 설치되어 있어야 한다. 참고하시길!

파이프라인 명령어에서 써먹기 위한 젠킨스 내 도커 설치 방법

🥸 문제 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

🥸 문제 3[해결] - 파이프라인


젠킨스를 계속적으로 빌드하면 기존의 있는 컨테이너 떄문에 오류가 난다.

➡ 기존에 돌아가는 컨테이너를 멈추고 제거한 다음(이게 또 멈추기만 하면 안된다) 새로운 컨테이너를 돌렸다.

➡ 이를 위해선 돌아가는 컨테이너를 이름을 통해 아이디를 알아내어야 했다 : 참고한 링크

$ docker container stop $(docker container ls -q --filter name=myapp*) 와 같이 파이프라인을 구성했더니 ssh 창에서는 잘만 실행되던게 파이프라인에서는 $()안의 명령어가 먼저 실행되면서 오류가 출력되었다.🧐

➡ 따라서 docker container ls -q --filter name=myapp* 을 원격 서버인 WAS 서버 에서 실행한다.
(파이프라인은 젠킨스 서버에서 실행되는 것이니 WAS 서버가 원격서버이다.)

➡실행한 값을 젠킨스 서버의 변수로 저장한 후 해당 변수값의 컨테이너를 멈추고 제거하는 식으로 파이프라인을 구성했다: 명령어 실행 결과 저장 참고 링크

🥸 문제 4[해결] - 파이프라인

git clone 부분에서, 공식사이트의 깃랩을 이용했을 때는 기본적인 url만 적어도 작동했는데 내 서버에 설치된 깃랩에서 pull받으려고 할때는 인증 오류가 났다.
➡ 해당 관련해서 구글링 해보니 아래와 같이 '아이디:생성한인증토큰@Clone with HTTPS' 로 파이프라인에 적어주면 된다.

  git 'http://root:seCJriGN_ZjgQK8RhxpF@젠킨스아이피:8080/root/doc-wpl.git' 

🥸 문제 5[각자 상황에 따라] - 파이프라인

처음에는 그냥 이미지 태그 latest로 새로 만들고 컨테이너 돌리면 끝일 줄 알았는데 똑같은 리포지토리의 똑같은 태그로 이미지를 만들면 기존의 이미지가 <none>:<none>으로 바뀐다.

현재 파이프라인에서는 컨테이너와 이미지 모두 지우는 것으로 되어 있다. 어플리케이션을 버전관리 필요여부에 따라 파이프라인을 변경하면 된다.

  • 애플리케이션 버전 관리 하자!
    : 이미지와 컨테이너 모두 이름을 변수값으로 살장헤사 매번 빌드할때마다 달라져야한다. 아마 이는 환경변수를 통해 설정하면 되지 않을까 싶다... 아직 확실하게 테스트해본 것은 아니라 추후에 이 부분에 대해서는 보완하자!

    • 도커 이미지로 버전관리를 할 경우
      : docker build 부분에서 태그를 'latest'와 같은 상수값이 아닌 변수로 대체하고 이전 버전의 도커 이미지를 지우지 않는다.
      : 혹은 문제1에서 언급했던 것과 같이 도커 허브에 이미지를 올려 버전관리를 하는 방법도 있다. 이 또한 이미지의 태그를 변수로 설정해서 관리해야 할 것 같지만,,,
    • 도커 컨테이너로 버전관리를 할 경우
      : 컨테이너를 지우지 않고 docker run 부분에서 컨테이너 이름을 매번 다르게 지정한다(컨테이너 이름 지정은 --name 태그로!).
  • 애플리케이션 버전 관리가 필요 없다!
    : 지금 파이프라인처럼 컨테이너와 이미지 파일 둘다 지우기


🥸 교훈: .ssh 폴더에 있는 파일들(키)은 권한 변경하지 말자....! 변경했다가 서버가 맛이 가서 GCP가 제공하는 ssh창이 뜨지도 않았다.

profile
밥소🐈

0개의 댓글