EC2 Ubuntu 20.04LTS CI/CD

강혜성·2023년 2월 2일
0

ZZALU 프로젝트

목록 보기
3/11

참고노션 : https://dramatic-armchair-97f.notion.site/e85a109829c94c9ea5c841ca8e852ac5

  1. EC2에 docker를 이용하여 jenkins를 설치한다.
  2. jenkins를 이용해 build 시 gitlab의 dev branch를 받아와 vue를 빌드한다.
  3. 빌드된 vue 파일을 이용하여 spring boot와 연동한다.

도커 설치

  • 우분투용 도커 설치
https://docs.docker.com/engine/install/ubuntu/

젠킨스 설치

  • 도커로 Jenkins 설치
  • 웹 서버도 띄울 예정이므로 포트는 8081로 설정
  • sudo vim /etc/sysconfig/jenkins 에서 포트 변경 가능
sudo docker run --name jenkins -d -p 8081:8080 -p 50000:50000 jenkins/jenkins:lts
  • 젠킨스 접속
    http://[IP]:8081
  • 접속 Password는 Ubuntu에 sudo docker logs jenkins를 입력해서 찾을 수 있음
  • 추천 plugin 설치
  • Plugin Manager를 통해서 Avaliable plugin 설치
    Gitlab, Publish Over SSH, Mattermost Notification, docker, node.js 설치

젠킨스 Publish Over SSH

  • 젠킨스 관리 > Configure System
  • Publish Over SSH에 .pem 키 붙여넣기
  • SSH Servers 설정
Name : zzalu_deploy_server_test
Hostname : [EC2 domain] 
Username : ubuntu
Remote Directory : /home/ubuntu/jenkins_build 
  • 설정 이후 오른쪽 하단 Test Configuration 클릭
  • Error 발생 : jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [zzalu_deploy_server_test]. Message [java.net.UnknownHostException: http://###/]]
  • Ubuntu 설정
mkdir ~/jenkins_build
sudo vim /etc/ssh/sshd_config
  • /etc/ssh/sshd_config에 아래 2줄 추가
	PubkeyAuthentication yes
	PubkeyAcceptedKeyTypes +ssh-rsa
  • 이후 서비스 재시작 sudo service sshd restart
  • 결과로 success 반환

젠킨스 Pipeline

  • New Item -> Pipeline 생성
  • pipeline syntax를 클릭한 후 스크립트 생성
  • Snippet Generator > Sample Step > checkout: ~
    * gitlab 연동
  • Snippet Generator > Sample Step > sshPublisher: ~
    * jenkins, ec2 ssh 연결

EC2 Ubuntu java 설치

sudo apt-get install openjdk-11-jdk

젠킨스 NodeJs 설치

  1. Global Tool configuration
  • DashBaord > Jenkins 관리 > Global Tool configuration
  • Add NodeJs 14.20.1
  • 정상 반영 X 다른 방법을 설치
  1. jenkins에 접속해서 설치
  • sudo docker exec -it -u root jenkins /bin/bash
  • nvm 설치 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
  • 활성화 . ~/.nvm/nvm.sh
  • 14버전 설치 nvm install 14
  • 모든 유저에게 적용 n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; cp -r $n/{bin,lib,share} /usr/local

젠킨스 Java 설치

  • sudo apt-get install openjdk-11-jdk

젠킨스 Pipeline Code

  • Vue 프로젝트 반영되는 확인

node {  
    stage('Build') { 
            
        checkout scmGit(~)
        dir("front") {
           sh "pwd"
           sh "npm install"
           sh "npm run build"
       }   
    }
}
  • error-eacces-permission-denied 에러 발생
    sudo npm install -g --unsafe-perm=true --allow-root 명령어 실행

젠킨스 일반 유저 권한 설정

  • sudo 명령어 적용 안되는 문제 설치로 해결
apt-get update
apt-get install sudo
apt-get install vim
  • visudo파일을 열기위한 파일 에디터 vim 설치
  • sudo visudo 명령어로 설정파일 열기
    jenkins ALL=(ALL) NOPASSWD: ALL 추가

EC2 Ubuntu MariaDB, Redis, Kafka, Zookeeper 설치

MariaDB 설치

  1. MariaDB 설치
    • cmd에서 docker run 커맨드 실행
      docker run --name maria-db -d -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=password mariadb
  2. DB 및 계정 생성
    • cmd에서 docker exec 커맨드 실행
      docker exec -it maria-db mysql -u root -p
    • DB 생성
      create database IF NOT EXISTS `ssafy_sns`;

Redis 설치

// redis 이미지 불러오기
docker pull redis

// 불러온 이미지를 통해 redis docker 서버 실행
docker run --name myredis -d -p 6379:6379 redis

// redis 연결 확인
docker run -it --link myredis:redis --rm redis redis-cli -h redis -p 6379

Kafka / Zookeeper

  1. Git clone

    1. git clone https://github.com/wurstmeister/kafka-docker.git
  2. 클론한 폴더에서 docker-compose.yml 파일 수정

    version: '2'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        container_name: zookeeper
        ports:
          - "2181:2181"
        restart: unless-stopped
    
      kafka:
        build: .
        image: wurstmeister/kafka
        container_name: kafka
        ports:
          - "9092:9092"
        environment:
          DOCKER_API_VERSION: 1.22
          KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_MESSAGE_MAX_BYTES: 10000000
          KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
          KAFKA_DELETE_TOPIC_ENABLE: 'true'
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        restart: unless-stopped
  3. 해당 폴더에서 터미널 실행

    1. docker-compose up -d
    2. 여러개의 콘테이너 동시 설치하는 명령어

EC2 NVM 설치

  • curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh | bash
  • source ~/.bashrc

0개의 댓글