[DevSecOps] Jenkins CI/CD 파이프라인 SonarQube 통합 (1/3) - Jenkins 설치 및 Github 연동
https://yeonyeon.tistory.com/58
https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/ 에서 설치 파일 받아서 윈도우에서 설치 진행했는데, 바로 Error(Jenkins 0x8007052e - error logging on) 를 마주쳤다.
이는 Jenkins가 도메인 사용자 계정으로 서비스를 실행하는데, manager란 계정이 서비스로 로그온 할 수 있는 권한이 없기 때문이다. 따라서, 현재 존재하는 계정 중에 1개를 선택해서 서비스로 로그온 정책을 허용해준다.
그리고 방금 추가해준 계정으로 Jenkins 설치를 계속한다.
포트는 원하는 포트로 지정한다. 필자는 59005
설치가 완료되었지만 localhost:59005로 접근이 되지 않는다. Jenkins 설치 폴더에서 로그를 확인해보니 JAVA 버전이 맞지 않다고 한다. 로그를 보니 JDK 8과 11 버전만 지원한다고 한다.
https://www.oracle.com/java/technologies/downloads/#java8-windows 에서 JDK 8 버전을 설치하고 다시 Jenkins 설치 시작~!
혹시 설치 완료 후 또 해당 포트로 접속이 안된다면 아래와 같이 cmd를 통해 수동으로 Jenkins 서비스를 시작해주면 된다.
"C:\Program Files\Java\jdk1.8.0_321\bin\java.exe" -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Program Files\Jenkins\jenkins.war" --httpPort=59005 --webroot="%LocalAppData%\Jenkins\war"
localhost:59005 로 접속하면 이런식으로 Unlock Jenkins가 뜨는데 화면에 있는 경로의 파일에서 패스위드를 확인 후 입력해주자.
Install suggested plugins를 선택해서 기본 플러그인 설치한다.
플러그인 설치가 진행되고 있는 것을 볼 수 있다.
이후 계정 Admin User 계정을 만들자.
그러면 Jenkins 설치 완료다.
이제 Github 연동을 해보자.
이후 Build Now 를 통해 구성이 제대로 되었는지 확인한다.
필자는 아래와 같은 에러코드가 떠서 계속 실패했는데, Branch 설정을 실제 github에 존재하지 않는 Branch로 설정했기 때문이다. 아래와 같은 에러가 발생하면 연결하려는 Branch 주소가 적절히 입력되었는지 확인해보자.
Couldn't find any revision to build. Verify the repository and branch configuration for this job.
빌드에 성공하면 Jenkins 설치 폴더 아래 workspace에 프로젝트 내용이 배포된 것을 확인할 수 있다.
그리고 참고로 Add build step 기능을 통해 빌드 이후 실행할 명령어나 스크립트도 지정해줄 수 있다.
지금까지 Jenkins와 github 기본 연동은 된 셈이라고 볼 수 있다. 이제 github push 이벤트가 발생할때마다 자동으로 build 되도록 설정해보자.
먼저 Github에서 토큰을 발급 받는다.
그리고 발급 받은 토큰을 Jenkins에 입력해준다.
그리고 다시 Github로 이동해서 Webhooks을 추가해준다.
여기서 Add webhook 을 진행하면 Error가 발생한다.
There was an error setting up your hook: Sorry, the URL host localhost is not supported because it isn't reachable over the public Internet
혹시 도메인 이름이 localhost 라서 그런가 해서 Jenkins 시스템 구성에서 Jenkins URL을 바꿔보니, 잘된다.
여기까지 하면 이제 Github push 했을 때, 자동 배포 하는 것까지 완료되었다. 잘 동작하는지 확인해보자.
먼저 코드를 수정하고
코드를 Commit 하고
push를 해본다.
결과는 실패!
음 Jenkins 쪽 설정을 다시 살펴보니, 아까 테스트한다고 잠시 Github hook trigger for GITScm polling을 뺐었다. 다시 체크해주고 동일하게 테스트해본다.
결과는 또 실패!
Gitgub의 Webhooks 로그를 보니 아래와 같이 나온다.
아마도 github 웹훅에 들어간 Jenkins IP가 공인 IP가 아니고 사설 IP라 push 이벤트가 발생하더라도 jenkins는 Webhook 전달을 못받는게 아닌가 싶다. ngrok를 사용해 테스트용 공인 주소로 바꿔준다. (https://hleecaster.com/local-web-server-ngrok/) (공인 주소 제한시간이 있다고 한다.)
ngrok을 사용해서 공인 주소를 얻고 Webhook URL도 변경해주고 다시 테스트해보자.
또 에러가 나타났다. 다행히 이번에는 에러가 바뀌었다. 기존 에러는 ngrok 으로 수정되었다는 것이다.
에러는 다음과 같이 timed out 이다.
ngrok 상태창을 보니 /github-webhook/ 관련 Requsets는 200 OK로 응답해주지 않고 있다.
timed out 이라... 보내는곳의 속도가 느리거나 대기 시간이 짧거나 둘 중 하나가 되겠다. 구글링해보니 대부분 포트를 8080으로 사용하는데 포트를 바꿔볼까 싶기도하다.
더 트러블슈팅을 해보고 싶지만 생각보다 시간이 많이 지나서 여기까지 하고 넘어가려고 한다. 목적은 jenkins와 sonarqube 연동이므로 github의 push 이벤트를 자동으로 받지 않고 수동으로 이벤트를 발생시키면 될것으로 보이기 때문이다.
그럼 20000