References
- https://kkangsg.tistory.com/92 (git 명령어 정리)
- https://hyeo-noo.tistory.com/184 (git push 인증오류)
- https://jjeongil.tistory.com/1366 (Jenkins)
- https://stackoverflow.com/questions/61344317/im-getting-error-public-key-for-jenkins-2-232-1-1-noarch-rpm-is-not-installed (Public key 문제 Trouble shooting)
- https://inpa.tistory.com/475 (git 토큰 발급)
- https://ict-nroo.tistory.com/31 (jenkins 란)
- https://honeyinfo7.tistory.com/302 (jenkins Couldn't find any revision to build. Verify the repository and branch configuration for this job. / Trouble shooting)
- https://txegg.tistory.com/173#:~:text=%EC%A0%A0%ED%82%A8%EC%8A%A4%20%EC%84%A4%EC%B9%98%20%EB%B0%8F%20%EC%97%B0%EB%8F%99&text=sudo%20docker%2Dcompose%20up%20%2Dd,%EC%9D%B8%ED%84%B0%EB%84%B7%EC%83%81%EC%97%90%EC%84%9C%20%EB%93%A4%EC%96%B4%EA%B0%88%20%EC%88%98%20%EC%9E%88%EC%9D%8C. (JENKINS - GITHUB 연동을 통한 DOCKER CI/CD 환경 구성)
- https://allonsyit.tistory.com/90 (Jenkins 스케줄 설정)
- https://tech.forums.softwareag.com/t/running-webmethods-microservices-runtime-on-kubernetes/237180 (Kubernetes 를 이용한 배포 / Service 개념)
- https://tommypagy.tistory.com/230 (네임스페이스 생성)
- https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ (네임스페이스 설정 가이드 *주의_ 는 namespace 명으로 생성 불가능)
- https://june-933.tistory.com/26 (troubleshooting yaml 문제) > :set list
- kubectl describe pods --namespace=cudo-devops // 에러 확인용 describe 명령 또는 logs 사용
- https://github.com/kubernetes-sigs/metrics-server/releases ( metrics-server-helm-chart component.yaml)
- 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 Shooting1. 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 로 설치
- Plugin 설치 & 설정 ( Git integration , Publish Over SSH 플러그인 )


- 시스템 설정

- 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/dockerecho create_dockerfiles./is_container.sh createPackageDockerfile -Dimage.name=192.168.1.131:5000/cudo-devops/base-msr:1.0echo build_custom_image./is_container.sh buildPackage -Dimage.name=192.168.1.131:5000/cudo-devops/custom-msr:$BUILD_NUMBERecho push imagedocker push 192.168.1.131:5000/cudo-devops/custom-msr:$BUILD_NUMBER