References




  • DevOps
    • 애플리케이션 개발 팀(Dev)과 해당 IT 운영 팀(Ops) 팀 간의 원활하고 지속적인 커뮤니케이션, 협업, 통합, 가시성 및 투명성을 장려
    • 개발 팀과 IT 운영 팀 간의 커뮤니케이션 및 협업에 대한 장벽을 허무는 노력과 함께 DevOps는 고객 만족과 더 빠른 가치 제공이라는 핵심 가치를 추구, DevOps는 비즈니스 혁신을 추진하고 지속적인 프로세스 개선을 주도하도록 설계

  • Git
    • 형상 관리 도구, 버전 관리 시스템
    • 중앙서버에서 소스코드와 히스토리를 저장하는 SVN과 달리 소스코드를 여러 개발 PC와 레파지토리에 분산해서 저장할 수 있어 Git을 많이 사용한다.


  • Jenkins
    • 이전에는 일정시간마다 빌드를 실행하는 방식이 일반적, 특히 개발자들이 당일 작성한 소스들의 커밋이 모드 끝난 심야 시간대에 이러한 빌드가 타이머에 의해 집중적으로 진행 (nightly-build)
    • 젠킨스는 CI 툴로 정기적인 빌드에서 한발 나아가 서브 버전, Git 과 같은 버전 관리 시스템과 연동하여 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정




Step 1. Github 레파지토리 - 로컬 저장소 (MSR 서버) 연동

  • Github Public Repository 생성
    • 계정 생성 후 Repository 생성

    • 생성된 Repository의 URL 저장


  • Microservices Runtime 서버
    • 사용자 정보 등록
// 이름 설정
$ git config --global user.name "이름"

// 이메일 설정
$ git config --global user.email 이메일 // github에 등록된 email을 입력해야 commit 내역이 올라간다.

    • Packages Directory 와 Github Repository 연결 ( Github 토큰 발급 필수 )
$ cd {Install_Dir}/IntegrationServer/packages // 버전 관리 할 패키지 폴더로 이동
$ git init // github와 연동시킬 .git 파일 추가 (master branch 생성)
$ git add README.md // README.md 파일 추가
$ git commit -m "작성하고 싶은 메세지" // README.md 파일에 "작성하고 싶은 메세지" 커밋을 달아준다.
$ git branch -M master // 현재 branch 위치를 master로 지정
$ git remote add origin {저장소 주소} // 폴더와 github url을 연동 (.git 삭제)
$ git push -u origin master // 폴더에 있는 파일을 master branch로 올린다.


## Trouble Shooting
1. access token 에러
-> Github > settings > Developer settings > Personal access tokens > Generate new token > 토큰명 , 권한 설정 후 토큰 생성 > 토큰 복사

git commit 후 push 시
$ Username for https://github.com : "토큰발급 받은 github 이메일"
$ Password for https://github.com/{id} : "발급받은 Access Token"

2. branch 관련 에러
$ git push -u origin main // main 브랜치로 변경

3. push 에러
$ git push origin +main (강제 푸시) 명령 (Push 오류시)



Step 2. Github와 Jenkins 연동

  • Jenkins 설치
$ curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
$ yum install -y jenkins

$ systemctl enable jenkins
$ systemctl start jenkins

>> http:// {{IP}} : 8080 (기본포트) 접속

## 첫 화면 Unlock Jenkins Password 확인

$ vi /var/lib/jenkins/secrets/initialAdminPassword

## continue 후 웹 화면에서 install suggested plugins 로 설치




  • 시스템 설정

    • Publish Over SSH 설정 예시


    • Github 연결 설정
    • Test connection 후 Save & Apply




Step 3. Jenkins 프로젝트 생성 & 설정 ( 스케줄링 & 빌드 후 원격 Shell script 실행)


  • 프로젝트 생성



  • 프로젝트 설정

    • Github 레파지토리 연결 ( 생성한 프로젝트(.git 삭제), 레파지토리 URL 입력 )

    • 빌드 스케줄링 설정
      • schedule : Cron 형식으로 시간 설정 (0 8 * * * : 오전 8시 정각 빌드)
      • H 8 * * * 권장 > 8시 중 랜덤으로 빌드 > 부하분산


    • 빌드 후 조치 설정

예시 스크립트
## 설치된 MSR의 docker 쉘 스크립트 실행
## $BUILD_NUMBER (빌드 번호 > Jenkins 환경변수)

cd /webM/IntegrationServer/docker

echo create_dockerfiles
./is_container.sh createPackageDockerfile -Dimage.name=192.168.1.131:5000/cudo-devops/base-msr:1.0

echo build_custom_image
./is_container.sh buildPackage -Dimage.name=192.168.1.131:5000/cudo-devops/custom-msr:$BUILD_NUMBER

echo push image
docker push 192.168.1.131:5000/cudo-devops/custom-msr:$BUILD_NUMBER