도커를 이용해 젠킨스 실습

선형채·2023년 5월 9일
0
post-thumbnail

추후 해야할 ? 리스트

  1. 젠킨스 실제 스프링프로젝트 빌드해보기
  2. 젠킨스 롤백
  3. aws 연동

Jenkins

  • CI/CD 란?
    CI(Continuous Integration, 지속적인 통합): 지속적인 빌드와 테스트 자동화를 의미합니다.
  • CD(Continuous Delivery, 지속적인 서비스 제공 또는 지속적인 배포) : 배포 자동화를 의미합니다.

Jenkins 란?
자바 기반 웹 애플리케이션으로 CI/CD을 위한 도구입니다. 즉 빌드, 테스트, 배포를 자동화해 줍니다.

젠킨스의 대한 자세한 설명은 여기를 클릭해주세요.

1. Docker 설치

https://docs.docker.com/get-docker/

만약 설치하다가

이런 메세지가 뜬다면

window 기준으로
cmd창 켜서

wsl --update

입력을 해주면

가 뜬다.

도커가 설치가 되면

해당 링크를 따라해 서버를 띄어보면

이런식으로 실행이된다.

웹서버에서 한번 해당 포트를 열어보자

localhost:4444

우와 이렇게 뜬다

위 예제처럼 하였지만 에러가 발생한다 ?? 아래링크를 따라해보자
https://chanzu.tistory.com/97?category=1057656

자 여기까지 했으면 젠킨스를 깔아봐야죠 ?

windows powershell 을 킵니다

2.Jenkins 이미지 내려받기

docker pull jenkins/jenkins:lts

를 입력하면 젠킨스 이미지가 생성이 되며 :lts 는 jdk8로 된다는점

이미지를 내려받았다면
docker images
명령어를 통해 다운로드 된 이미지를 확인하자.

Jenkins 이미지를 컨테이너로 실행하기

docker run -d -p 8180:8080 -v /var/jenkins_home --name jenkins -u root jenkins/jenkins:lts

해당 포트(localhost:8180)으로 접속하게되면

라고 뜬다.

docker - containers - jenkins - files 속
/var/jenkins_home/secrets/initialAdminPassword 에 들어가면 패스워드가 뜬다

로그인을 하고나면 아래와 같은 페이지가 나온다.

초기에 플러그인을 설치할 수 있는 화면인데, 'install suggested plugins'를 클릭하여 기본 플러그인들을 설치해주자.

플러그인을 모두 설치하고 나면 아래와 같이 계정을 생성하는 페이지가 나온다.

정보를 입력 후 Save and Continue 버튼 클릭

정보 입력후 save and continue

git - jenkins 연동하기

🎈가장 전통적인 방식은 FreeStyle Project이지만 최근에는 코드 하나로 모든 CI & CD가 구현이 되는 Pipeline을 이용해서 구축하는게 좋을거같다는 생각

  • 젠킨스 메인페이지에서 새로운 Item -> FreeStyle Project 를 생성해줍시다.

  • 가장 먼저 GitHub Project 를 선택해주고, 본인이 연동하고자 할 깃허브 레포지토리 URL 를 넣어줍니다.

다음으로 "소스 코드 관리"로 넘어가서, Git 을 선택해주고 마찬가지로 깃허브 레포지토리 URL 를 넣어줍시다. 그러고 Credentials 라는 란이 나오게 되는데, 이는 Jenkins 와 깃허브간에 데이터를 주고받을 때의 인증 방식을 의미하는 것입니다.
보통 현업에서는 SSH-key 인증 방식을 사용하지만, 저희는 임의로 간단한 테스트 프로젝트를 생성하고 연동하는 것이 목표이기 때문에 깃허브 계정 로그인 인증방식을 사용하겠습니다.

  • 맨 처음에는 Credential란에 None 이 뜰텐데, 해당 None 을 클릭후 add 를 클릭하여 본인의 깃허브 계정의 아이디와 비밀번호를 입력해주시면 됩니다.

다음으로 깃허브에 push가 될때 build 가 실행될 브랜치를 선택할 수 있습니다. 저는 임의로 생성한 테스트 레포지토리에서 메인 브랜치를 master가 아닌 main 브렌치로 설정했기 때문에, main 브랜치로 바꿔줬습니다.

그 다음으로 빌드을 어떤 방식으로 진행할지 지정할 수 있는데(build trigger), 저희는 위와 같은 방법을 택하도록 하겠습니다.

Execute shell 빌드 실행내용

다음으로 build steps 에서 빌드할 내용을 지정해주시면 됩니다. 아래와 같이 작성해줍시다.

chmod +x gradlew
./gradlew clean build


WebHook 연동 : Github + Jenkins

다음으로는 연동하고자 했던 해당 깃허브 레포지토리에 접속해서 Webhook을 설정해주셔야 합니다. 레포지토리의 Settings -> Webhooks 란으로 들어가줍시다.

그리고 Webhook 을 추가해줍시다. 그리고 아래와 같이 구성해주셔야 합니다.

  • Payload URL : 젠킨스 IP주소:호스트 포트번호/github-webhook/
  • Content type : application/json
Payload URL 포맷 예시
http://123.456.78:8080/github-webhook/
=> 맨 마지막에 github-webhook/ 을 꼭 붙여주셔야합니다!

  • 만일 앞서 Jenkins 에서 설정시 Credentials 를 로그인 인증방식이 아닌, ssh-key 인증방식을 택하셨다면 github Deploy 란에서도 따로 ssh-key 를 등록해주셔야 연동이 가능해집니다! 다만, 저는 이번 테스트에서 앞서 봤듯이 User-password 방식을 택했으므로 ssh-key 를 등록하지 않았습니다.

Jenkins에서 Pipeline 생성

이제 젠킨스와 Github 연동은 마쳤습니다.

이제 실제 CI & CD를 구축할 차례입니다.

젠킨스 메인 화면에서 좌측에 새로운 Item을 눌러서 Job을 생성하겠습니다.

Jenkins에서는 여러 종류의 Job을 만들 수 있습니다.

가장 전통적인 방식은 FreeStyle Project이지만 최근에는 코드 하나로 모든 CI & CD가 구현이 되는 Pipeline을 이용해서 구축하겠습니다.

적절한 이름으로 생성을 마쳤다면 바로 왼쪽에 '구성'버튼을 눌러 설정을 시작하도록 하겠습니다.

첫번째로는 Build Triggers 부분에 Github의 Webhook 기능이 활성화 될 수 있도록 체크해주세요.

그리고 하단에 코드를 입력하는 창이 있습니다.

코드의 문법으로는 Declarative Pipeline, Scripted Pipeline 2가지를 사용할 수 있습니다.

2가지를 혼용해서 사용할 수는 없습니다. 1가지만 선택해서 사용해야 합니다.

다만 Declarative Pipeline이 Scripted Pipeline보다 문법이 더 간단하며 권장되는 방식입니다.

또 Declarative Pipeline을 사용하면 Scripted Pipeline도 작성할 수 있는 기능이 있기 때문에 Declarative Pipeline을 이용해서 구축해보겠습니다.

참고 - Declarative Pipeline은 Blue Ocean에서 사용할 수 있습니다. Scripted Pipeline은 Blue Ocean 통합을 지원하지 않습니다. 파이프라인 문법 중에서도 대부분의 경우 Declarative 방식을 사용하시는 것을 추천합니다. 초보를 위해 편집 UI도 제공하기 때문에 정의하기가 편리합니다.

아래와 같이 양식을 맞춰주세요. credetialsId에는 위에서 Github 연동을 설정했을 때 ID값을 적어주면 됩니다.

pipeline {
    agent any

    stages {
        stage('github Clone') {
            steps {
               git credentialsId: 'sunblock99', url: 'https://github.com/sunblock99/JenkinsStudy.git'
            }
        }
    }
}

그리고 저장을 눌러서 메인에서 '지금 빌드'를 눌러주세요.

github Clone이 정상적으로 됐다면 우측 아래에 초록색으로 영역표시가 되며 성공했다는 알림이 뜹니다.

참고 - 위의 소스 코드를 JenkinsFile이라고 부릅니다.

https://stir.tistory.com/252

profile
JAVA BACK-END DEVELOPER 👩‍💻

0개의 댓글