Jenkins Docker EC2 Node

이건선·2023년 4월 14일
0

해결

목록 보기
22/48

참고 :https://not-to-be-reset.tistory.com/428

EC2

  • Jenkins 서버 1대, 배포 서버 1대를 준비한다.
    • Jenkins server는 사용자 서버 8080포트를 열어준다
    • 배포 서버는 SSH 22포트를 준비해 준다, 나중에 변경여부를 직접 눈으로 확인하고 싶다면 추가로 포트를 열어둔다. 지금은 눈으로 확인하기 위해서 3000번 포트를 열어두겠다.

공통적으로 EC2에 설치해야 할 것

  • docker 설치하기
    • https://shanepark.tistory.com/237

      Docker 설치

      오래된 버전 삭제하기

      혹시나 기존의 오래된 버전이 있는지 확실히 할 수 있으며, 있다면 최신 버전 설치를 위해 삭제 해줍니다.
      sudo apt-get remove docker docker-engine docker.io containerd runc

      repository 설정하기

      apt package index를 업데이트 하고 HTTPS를 통해 repository 를 이용하기 위해 pakcage 들을 설치 해줍니다.
      sudo apt-get update
      sudo apt-get install \
      		 ca-certificates \
      		 curl \
      		 gnupg \
      		 lsb-release
      Docker의 Official GPG Key 를 등록합니다.
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      stable repository 를 등록해줍니다.
      echo \
      "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-	keyring.gpg] https://download.docker.com/linux/ubuntu \
      	 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker Engine 설치하기

    아래 명령어를 입력하면 자동으로 최신 버전이 설치 됩니다.
    
	```
	sudo apt-get update
	sudo apt-get install docker-ce docker-ce-cli containerd.io
	```
    

설치 완료

설치가 완료된 후에는

    ```
    docker --version
    ```
    

를 입력해서 버전을 확인 하거나

https://raw.githubusercontent.com/Shane-Park/mdblog/main/OS/linux/ubuntu/docker.assets/image-20210919181521058.webp

혹은 hello-world 이미지를 실행 시켜 잘 설치되었는지 확인 할 수 있습니다.

    ```
     sudo docker run hello-world
    ```
    

https://raw.githubusercontent.com/Shane-Park/mdblog/main/OS/linux/ubuntu/docker.assets/image-20210919181654082.webp

Compose 설치

Docker Compose는 여러개의 도커 어플리케이션 컨테이너들을 정의하고 실행 할 수 있게 도와주는 툴 입니다. YAML 파일을 사용해 어플리케이션의 서비스를 설정하고 하나의 커맨드만으로 여러개의 도커 컨테이너들을 사용 할 수 있습니다.

Docker 를 설치 해도 Compose 가 딸려 오는 것은 아니기 때문에 따로 설치 해 주어야 합니다. 이전에는 stand-alone 으로만 제공되었지만 이제는 플러그인 형태로 지원되고 있습니다.

    ```
    sudo apt-get update
    sudo apt-get install docker-compose-plugin
    ```
    

잘 설치 되었는지 확인해봅니다.

    ```
    docker compose version## Docker Compose version v2.12.2
    ```
    

Compose 를 standalone 형태로 설치 원할 경우

플러그인 형태가 아닌 이전처럼 standalone 형태로의 설치를 원할 경우는 아래와 같이 할 수 있습니다.

    ```
    curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
    
    docker-compose --version #설치 여부 확인
    ```
    

sudo 없이 docker 명령어 실행

    docker 명령어를 쓸 때마다 sudo 를 입력하기 번거로워서 유저그룹을 추가하는 방법을 따로 포스팅 해 두었습니다.
    
    docker를 쓴다면 사실상 꼭 설정해야 한다고 생각하니, 아래 글을 클릭해서 따라 설정 해 주세요.
    

Linux, sudo 없이 명령어 실행하기 (예:docker)

 sudo usermod -aG docker {사용자명}
 // 재접속 해야만 적용됨

Jenkins EC2

1. 젠킨스 EC2 서버에 Docker image로 Jenkins 설치

매주 업데이트되는 weekly 버전과 좀 더 안정적인 LTS 버전으로 나누어지네요.저는 겁쟁이기 때문에 LTS 를 택하겠습니다.

▶ 도커허브로 부터 jenkins/jenkins:lts 이미지 pull

$ docker pull jenkins/jenkins:lts

▶ 젠킨스 컨테이너 실행

$ docker run -d --name jenkins -p 8080:8080 -v /jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts

여기서 핵심은 바인딩(-v) 옵션 입니다. // 이거 안하면 망함

  • v /jenkins:/var/jenkins_home젠킨스 컨테이너의 설정을 호스트 서버와 공유함으로써, 컨테이너가 삭제되는 경우에도 설정을 유지할수 있게 해줍니다.
    - v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock젠킨스 컨테이너에서도 호스트 서버의 도커를 사용하기 위한 바인딩입니다.이렇게 컨테이너 내부에서 설치없이, 외부의 도커를 사용하는 방식을 DooD(Dock out of Docker) 라고 합니다.[1]
  • p 8080:8080젠킨스의 defaul port 인 8080 을 호스트 서버와 매핑해줍니다.
  • docker container로 진입시 Jenkins키 찾기
docker exec <CONTAINER_NAME> cat /var/jenkins_home/secrets/initialAdminPassword

▶ 도커 컨테이너의 실행 상태 확인$ docker ps

2. git hub 웹 후크 설정

  • 만들어둔 깃 레포에서 웹 후크 설정 아이피 ⇒ 젠킨스 서버 아이피

3. 젠킨스 설정

  • <젠킨스 EC2 서버 IP>:8080

  • 젠킨스 서버에서 원격 서버에 접속하기 위한 ssh key 생성

    1. Jenkins 서버에서 ssh-keygen -t rsa 명령어로 ssh key를 생성한다. 여기서는 모든 항목을 Enter를 입력해서 넘어갔다. 중간에 passphrase를 입력해도 상관 없지만, Jenkins에 private key를 등록할때 추가로 passphrase를 입력해주어야 한다.

    2. $ ls .ssh/
      id_rsa  id_rsa.pub
      
      // private key인 id_rsa와 public key인 id_rsa.pub가 생성된 것을 확인한다.
    3. Jenkins 서버가 아닌 원격 서버에 Jenkins에서 ssh 연결을 할 계정으로 접속해서 public key를 등록해야 한다.만약 계정 이름이 'ubuntu'라면 /home/ubuntu/.ssh/ 디렉토리에 있는 'authorized_keys'파일에 위에서 생성한 public key를 등록한다. 만약 'authorized_keys' 파일이 존재하지 않으면 직접 생성하여 public key 내용을 복사해서 붙여넣어주면 된다.

      $ cat authorized_keys
      ssh-rsa AXXXXXD(생략) jenkins서버계정명@jenkins서버호스트네임
      
      // 이미 작성 되어있는 authorized_keys 끝에서 엔터치고 아래에 붙여 넣어주면 된다.
  • <젠킨스 EC2 서버 IP>:8080 에 Publish over SSH 설정

    하단의 'Publish over SSH' 항목에 id_rsa key 내용 전체를 복사해서 붙여 넣어준다. <안된다면 EC2 ssh -i 에 들어갈 때 사용하는 .pem 키 넣어보기>

    'SSH Servers' 문구 아래에 있는 '추가' 버튼을 선택한다.

위에서 추가한 private key를 이용해 실제로 접속할 원격 서버의 정보를 입력한다.

1. Name에는 아무 이름이나 넣어줘도 된다.

2.  Hostname에는 ssh로 접속해야 하는 서버의 ip 주소를 입력한다. <포트번호 없어야함>

3. 접속해야 하는 서버의 계정이름을 입력한다.

ssh 접속의 경우 기본으로 22번 포트를 이용하는데, 만약 접속해야 하는 서버의 ssh 접속 포트를 변경했다면 아래의 과정을 추가로 진행한다. ('Test Configuration' 버튼 위에 있는 '고급...' 버튼 선택)포트를 따로 변경하지 않았다면 우측 하단의 'Test Configuration'을 클릭하여, 위의 정보대로 서버에 ssh 접속이 가능한지 테스트를 할 수 있다. 'success' 문구가 출력된다면 성공이다.

'Port' 항목을 ssh 접속이 가능한 Port 번호로 변경한 뒤, 우측 하단의 'Test Configuration'을 클릭하여 ssh 접속이 되는지 테스트한다.

위의 그림과 같이 좌측 하단에 'Success'문구가 출력되면 Test 성공이다.

Test 성공이 되면 '저장' 버튼을 선택하여 수정 사항들을 저장한다.

  • git 연결

  • item 설정 및 테스트 'Freestyle project' 선택

  • Exec command 수정
    rm -rf 230309 &&
    git clone https://github.com/leegunsun/230309.git &&
    cd 230309 &&
    docker stop node &&
    docker rm node &&
    docker build -t node:practice . &&
    docker run -d -p 3000:3000 --name node node:practice
  • Dockerfile 예시
# node 이미지를 사용
FROM node:latest


# work dir
WORKDIR /app


# host pc의 현재경로의 파일을 workdir 의 현재 경로로 복사
COPY . .


RUN npm install 


# 3000 포트 오픈
EXPOSE 3000

# container 실행 시 자동으로 실행할 command
CMD ["node", "index.js"]
profile
멋지게 기록하자

0개의 댓글