Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[오픈소스] - CI 환경 구축 본문

CS

[오픈소스] - CI 환경 구축

maeng-kim 2024. 10. 22. 03:21

1. DevOps CI/CD 파이프 라인

- 작성한 소스코드 -> 도커 컨테이너로 실행 => 어떤 환경에서도 실행이 되도록 불변의 실행환경을 제공함

 

 

 

2. CI 환경 구축

- CI도구

   -> 지속적인 통합을 위한 소프트웨어 도구

   -> 매 커밋마다 프로젝트 빌드, 단위 테스트 등의 과정을 개발자 대신 자동화

- Travis CI
  -> 깃허브에서 진행되는 오픈소스 프로젝트를 위한 지속적인 통합 서비스

  -> private 레포는 유료

  -> 관리가 필요없는 무료 클라우드 기반 호스팅 제공 -> 전용 CI/CD 서버가 필요하지 않음 (젠킨스는 필요함)
  -> 느린 속도와 제한된 옵션 제공

 

- Jenkins
   -> 가장 널리 사용되는 오픈소스 CI도구

   -> 장점 ) 사용자 정의 옵션 + 방대한 양의 플러그인 지원 + 다양한 적용사례 및 풍부한 레퍼런스 

   -> 단점 ) 별도의 서버 필요. 시스템 구성 및 사용자 정의 시간이 오래 걸림 (opt많고 문법을 다 알아야함)

 

- Jenkins 설치 과정
   1. CI용 서버 생성
   2. 해당 인스턴스에 도커 설치 
   3. 도커 활용하여 젠킨스 이미지 빌드 

   4. 도커 파일 작성

FROM jenkins/jenkins:lts-jdk11
USER root
RUN apt-get -y update && \
apt-get -y install build-essential wget sudo apt-utils
RUN wget -qO- https://get.docker.com/ | sh
RUN usermod -aG docker jenkins
USER jenkins

   5. 젠킨스 컨테이너 실행 

docker run -d --name myjenkins -p 8080:8080 --restart=always -v
jenkins-home:/var/jenkins_home -v
/var/run/docker.sock:/var/run/docker.sock --group-add $(stat -c
'%g' /var/run/docker.sock) myjenkins

  6.GCP 방화벽 규칙 추가 (네트워크의 모든 인스턴스 허용 + tcp 8080포트 열기)

  7. GCP 고정 IP 만들기

  8. 젠킨스 플러그인 설치, 관리자 계정 생성, 인스턴스 연결 (IP주소)

  9. 깃허브 웹훅 설정 후 연결

~ 도커 연결 ~

  10. 도커 허브에 저장소 생성

  11. 도커 파일 작성

FROM ubuntu:20.04
RUN apt-get update && apt-get -y install build-essential && mkdir–p /app
COPY . /app/
WORKDIR /app/
CMD make

   12. 젠킨스파일 작성

   13. 도커 파이프라인 플러그인 설치 (플러그인 매니저 -> available -> docker pipline검색)

   14. 젠킨스 도커 허브 credential 설정

   15. 멀티브랜치 파이프라인 추가

   16. 깃허브 레포 url 설정 + 젠킨스 경로 설정

 

 

 

 

3. Jenkins Mutibranch pipline

- Muti-branch pipline
  -> 깃 브랜치를 기반으로 자동으로 파이프라인 생성

  -> 각 브랜치에 있는 젠킨스 파일 사용

  -> PR 기반의 브랜치 디스커버리 지원

  -> 조건에 따른 분기 가능 (stage, steps)

  -> 젠킨스를 활용한 개발 프로세스

더보기

• 개발자는 feature 브랜치에 코드를 commit
• 개발자가 feature 브랜치로부터 develop 브랜치에 PR을
요청
▫ Jenkins는 Unit test 및 정적 코드 분석 수행
• 개발자는 PR을 develop 브랜치에 merge
• 릴리즈 준비가 되면, develop 브랜치로부터 master 브랜
치로 PR을 요청
▫ Jenkins는 Unit test, 코드 분석, 배포 진행

- Pipline syntax

  -> Declarative vs Scipted
  -> 선언형 vs 명령형

  -> 무엇을 vs 어떻게

  -> SQL vs C

  -> pipline vs node (구문의 시작이 다름)

  -> when vs if

  <차이점>

  1. 유효성 검사 시기
     선언형: 파이프라인 시작 전부터 실행 가능한지 파악 후 만약 실패라면 실행조차 하지 않음

     명령형: 그냥 일단 실행 그러고 에러 만나면 멈춤 (eg. Python)

  2. 특정 stage에서 재시작이 가능한가

     선언형: 가능

     명령형: 불가능. 처음부터 다시 시작

 

 

 

4. PR 기반 젠킨스 활용

   1. github protection rule 설정을 통한 PR 강제

   2. github checks plugin 설치 및 설정

   3. 개발자 설정에서 깃허브 apps 생성

더보기

관련 설정
- Repository Permissions
• Checks: Read & Write
• Commit statuses: Read & Write
• Contents: Read-only
• Metadata: Read-only
• Pull requests: Read-only
- Subscribe to events
• 전부 enable
- Where can this GitHub App be installed?
• Only on this account

  4. private key 생성

더보기

- private key 생성하기
•.pem 파일 다운로드
• jenkins에서 사용가능한 포맷으로 변경
• openssl pkcs8 -topk8 -inform PEM -outform PEM -in
<다운로드한 pem 파일>.pem -out converted-jenkins.pem -nocrypt

 5. 깃허브 app 설치
     : github apps -> edit -> install app -> install

 6. 젠킨스 credential 추가