CI/CD - Jenkins, Gitlab

jsbak·2023년 6월 13일
0

Cloud

목록 보기
59/59

프라이빗 git 원격 저장소 구축

Git Lab 설치 (CentOS7)

  • 저장소 구축
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

# 저장소의 IP
$ EXTERNAL_URL="http://192.168.2.220" yum install -y gitlab-ce

# 방화벽 허용 (HTTP)
$ firewall-cmd --permanent --add-service=http
$ firewall-cmd --reload

# 패스워드 수정
$ cat /etc/gitlab/initial_root_password 
  • root password
  • 접속

  • root password 변경 - Preferences


github를 이용한 웹서버

  • EC2 생성
  • EC2 사용자 데이터
#!/bin/bash
timedatectl set-timezone Asia/Seoul
yum install -y httpd git
systemctl enable --now httpd
cd /var/www/html
git clone https://github.com/hkjs96/test-dev.git
mv test-dev/* .

gitlab을 활용한 버전 관리

  • 프로젝트 생성


  • 로컬 저장소
$ mkdir gitlab-test && cd $_
$ git init

# 넣을 자료 세팅

# 버전 관리를 위해 내 정보 설정
$ git config --global user.email "gitlab-test@example.com"
$ git config --global user.name "jsb"

$ git add .
$ git status
$ git commit -m "add gitlab site"

# GitLab 원격저장소 설정 및 로컬에서 원격으로 push
$ git remote add origin http://192.168.2.220/root/my-dev.git
$ git push origin master
# 이후 Git Credential Manager 설정에서 인증 정보 입력!


# GitLab 원격저장소의 커밋을 로컬저장소에 내려받기
# "main" 브랜치
$ git clone http://192.168.2.220/root/my-dev.git
$ cd-mydev
$ git checkout -b master

# "master" 브랜치
$ git pull origin master --allow-unrelated-histories
$ vi index.html
$ git add .
$ git commit -m "add my-dev"
$ git push origin master


# 원격저장소의 새로운 커밋을 로컬저장소에 갱신하기
$ git pull origin master

원격 저장소 마이그레이션

  • Github에서 Gitlab으로 마이그레이션
    • Gitlab 에서 my-gitlab 저장소 생성
$ cd ~
$ mkdir git-migration

# "git-migration" 에 mirror 내용을 넣는다.
$ git clone --mirror https://github.com/hkjs96/test-dev.git git-migration

$ cd git-migration/
$ git push -uf http://192.168.2.220/root/my-gitlab.git --all



CI/CD

  • 간단한 데브옵스 프로젝트
    • Continuous Integration (CI)
    • Continuous Delivery (CD)
    • Continuous Deployment (CD)

젠킨스 설치

$ sudo su -
$ timedatectl set-timezone Asia/Seoul
$ yum update -y
$ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
$ amazon-linux-extras install epel -y
$ amazon-linux-extras install -y java-openjdk11
$ yum install -y jenkins
$ systemctl enable --now jenkins

# 패스워드 수정
$ cat /var/lib/jenkins/secrets/initialAdminPassword 

젠킨스 초기 설정

  • 홈페이지 접속
    http://jenkins.goorm.shop:8080/
  • 패스워드 복사 후 입력


  • admin 패스워드 변경


젠킨스 Job(freestyle project) 설정

  • + 새로운 Item 생성 클릭
  • Freestyle project 체크
  • 구성 설정

Job 빌드 해보기

  • 지금 빌드 클릭
  • 빌드 정보 확인

Job 빌드 구성 변경

  • 구성 클릭
  • 빌드 구성 변경
  • 변경 결과 확인

젠킨스와 깃

Install Git on Jenkins Instance

$ hostnamectl set-hostname jenkins-server
$ yum install -y git
# https://github.com/hkjs96/hello-world.git - 생성

젠킨스 작업 공간

cd /var/lib/jenkins/workspace/

플러그인 설치

Dashboard - Jenkins 관리 - Plugins


  • Git 구성
    Dashboard - Jenkins 관리 - Tools
  • 작업 생성
  • 작업 구성
    • General
    • 소스 코드 관리
  • 작업 빌드

PullCodeFromTest-Dev 작업

  • 깃 저장소 내용
  • 작업


  • 젠킨스의 워크스페이스에서 확인
    • 젠킨스 워크스페이스 : /var/lib/jenkins/workspace

Jenkins와 Maven 이용

Maven 설치

  • Maven - install.html
    • 자바 기반 프로젝트의 빌드, 패키징, 의존성 관리 등을 자동화하기 위한 도구
# 꼭 "/opt" 가 아니여도 된다.
$ cd /opt
$ wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
$ tar -xvzf apache-maven-3.8.8-bin.tar.gz
$ mv apache-maven-3.8.8 maven
$ ls maven/bin
$ cd ~

# 자바11 경로 찾기
$ find / -name java-11*

# 자바 환경 설정 세팅
$ vi .bash_profile
----------------------------------------
M2_HOME=/opt/maven
M2=/opt/maven/bin
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.amzn2.0.1.x86_64

# User specific environment and startup programs

#PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/bin:$JAVA_HOME:$M2_HOME:$M2
----------------------------------------

$ source .bash_profile
$ mvn -v


Maven Plugin 설치

  • Dashborad - Jenkins 관리 - Plugins - Available plugins

Tools 구성

  • JDK 설정 : java 경로 지정
  • Maven : 메이븐 경로 지정

FirstMavenProject 작업

  • 메이븐 프로젝트 생성
  • 소스 코드 관리
  • Build : 실행 목표 설정 (비우고 새로 설치-clean install)
  • 지금 빌드 클릭
  • Output 결과
  • 결과 - war 파일 생성

Tomcat 서버

  • ec2 생성



  • 호스팅 영역에 레코드 생성

Tomcat 서버 설치

$ sudo su -
$ timedatectl set-timezone Asia/Seoul
$ yum update -y
$ hostnamectl set-hostname tomcat-server
$ amazon-linux-extras install -y java-openjdk11
$ cd /opt
$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
$ tar -xvzf apache-tomcat-9.0.76.tar.gz
$ mv apache-tomcat-9.0.76 tomcat
$ cd tomcat/bin/
$ ./startup.sh
  • 결과

Manager App

  • Manager App : 기본권한으로는 접근 불가

권한 설정

  • 파일 찾기
$ cd /opt/tomcat
$ find / -name context.xml

  • host-manager/META-INF/context.xml 파일 수정
$ vi /opt/tomcat/webapps/host-manager/META-INF/context.xml
----------------------------------------
=> 원격지에서도 접근을 허용하기 위해 주석 처리

<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
----------------------------------------
  • manager/META-INF/context.xml 파일 수정
$ vi /opt/tomcat/webapps/manager/META-INF/context.xml
----------------------------------------
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
----------------------------------------
  • 톰캣 재시작 후 접속
$ cd bin/
$ ./shutdown.sh
$ ./startup.sh

  • tomcat-users.xml - 로그인 유저 설정
$ vi /opt/tomcat/conf/tomcat-users.xml
----------------------------------------
	=> 역할 4가지 정의
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
	=> 역할에 따른 유저 정의
<user username="admin" password="kosa0220" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
<user username="deployer" password="kosa0220" roles="manager-script"/>
<user username="tomcat" password="kosa0220" roles="manager-gui"/>
----------------------------------------

  • 링크 파일 생성(; 바로가기 지정)
$ ln -s /opt/tomcat/bin/startup.sh /usr/local/bin/tomcatup
$ ln -s /opt/tomcat/bin/shutdown.sh /usr/local/bin/tomcatdown
$ tomcatdown
$ tomcatup

플러그인 설치

  • Dashboard - Jenkins 관리 - Plugins - Available plugins
  • Dashboard - Jenkins 관리 - Credentials (; tomcat Credential 설정 - manager-script 로 충분하기 때문에 "deployer")


    • 로그인 정보(Username/Password), 선택할 식별자(ID) - ❗ "로그인 정보" 정확하게 입력

BuildAndDeployJob

  • 작업 생성
  • 설정
    • General
    • 소스 코드 관리
    • Build
    • 빌드 후 조치


    • 💢 컨텍스트 경로를 비워두면 webapp.war 의 이름(/webapp)을 기본 컨텍스트 경로로 잡는다. 비우지 않고 예를 들어 / 로 설정하면 /ROOT 를 잡는다.




  • index.jsp 업데이트
    • 다시 빌드

BuildAndDeployJob - 자동 빌드

  • 1분 마다 확인해서 변경된 내역이 있다면 빌드를 수행


  • 또 다른 내용 push

profile
끄적끄적 쓰는곳

0개의 댓글