본문 바로가기
프로그래밍/웹서버

[Jenkins] Github Pull Request Builder 설치 및 project 구성

by 오답노트의 주인 2022. 4. 11.

2022.04.10 - [프로그래밍] - [Jenkins] 설치 및 Github와 연동, Ngrok을 이용해 공인 Url받기

== Version ==
Jenkins        v2.33.2
Ubuntu        18-04 LTS
Ngrok        2.3.40
NodeJS        16.9.0

목표

  • Github Pull Request Builder 설치, 설정
  • Freestyle project 생성 후 테스트

 


Github Pull Request Builder

Jenkins 관리 > 플러그인 관리 > 설치 가능 항목중에 Github Pull Request Builder 선택 후 설치

 

Jenkins 관리 > 시스템 설정 > Github Pull Request Builder 

Credential 추가를 해야 빌드중에 Github에 로그인할 수 있다. 

Kind > Secret text를 선택하고 Secret에는 Personal access token을 추가해준다.

 

이 토큰은 Github 계정 설정에서 개발자 설정에 있는 토큰을 의미한다. 

토큰의 권한은 이렇게 해두었다.

만약 제대로 입력했다면 연결을 테스트했을 때 에러없이 출력되는 것을 볼 수 있다.


Freestyle project 생성

새로운 Item 생성 > Freestyle project를 골라 생성한다.

 

Pipeline을 이용하는게 좋지만 Webhook을 잘 받는지 테스트한 후 Publish Over SSH를 사용하기 위해 이용하지 않았다.

Jenkins SCM SSH

소스코드관리 > Git 선택, 프로젝트를 원격 저장소에서 받아오기 위해 SSH를 이용한다.

 

SSH를 이용할 때 안전한 연결을 위해 Public key와 Private key로 인증을 거치게 되는데, 이 내용에 대해서는 이 포스팅을 참고하는게 좋겠다.

https://choco4study.tistory.com/32

 

[공부] SSH (Secure Shell) : 기초 및 심화 개념

* 개인적인 공부 내용을 기록한 글입니다. SSH 기초 1. SSH란? Secure Shell = 보안 셸 원격지 호스트 컴퓨터에 접속하기 위해 사용하는 인터넷 프로토콜이다. 과거에 주로 사용되던 Telnet은 암호화가 이

choco4study.tistory.com

로컬에서 Key pair를 생성한 다음, Github 서버에 등록해둔다.

 

cmd에서 WSL로 진입, ssh-keygen을 입력, passphrase 같은 옵션들은 그냥 무시해도 좋다.

 

~/.ssh/로 이동하면 id_rsa, id_rsa.pub 파일이 생긴걸 볼 수 있다.  

id_rsa는 비공개키, id_rsa.pub는 공개키로, 잘 생성되있는데 이걸 등록하면 된다.

kind는 SSH Username with private key, Private Key에 비공개 키를 입력 후 추가한다.

Github에 키를 등록하지 않았기 때문에 에러가 뜬다. 

 

리포지토리 > Settings > Deploy keys 로 이동하고 Add deploy key를 눌러 추가한다. 이 때 id_rsa.pub를 추가한다. 

제대로 추가되었다면 이렇게 보인다. 아직 인증과정을 거쳐본 적이 없기 때문에 Never used로 표시된다.

다시 소스코드관리로 돌아가 Credentials을 None으로 바꾸고 아까 등록한 credential을 선택하면 오류가 보이지 않게 된다. 그리고 열쇠모양 아이콘이 초록색으로 바뀌게 된다. 이제 정상적으로 연결해서 프로젝트를 받아올 수 있게 되었다.

고급버튼을 눌러 refspec을 이렇게 설정한다.

+refs/pull/*:refs/remotes/origin/pr/*

그리고 branch를 이렇게 설정한다.

${sha1}

 

공식문서에서 소개하는대로 설정했는데, 빌드가 진행되지 않았다. Credential들은 다 정상이었지만 Pull Request가 일어날 때 빌드를 못하고 있었다.

찾아보니 설정을 약간 다르게 해야했다. 만약 위 방법대로 설정했는데 제대로 빌드가 되지 않는다면 아래 링크를 확인해 진행하면 되겠다.

https://stackoverflow.com/questions/61230313/github-pull-request-builder-not-triggering-jenkins-job/66780000#66780000

 

Github Pull Request Builder 

그 다음, 빌드 유발로 이동해 Github Pull Request Builder를 체크하고 Admin list에 리포지토리의 admin을 등록한다.

 

이 admin은 Github유저명을 의미한다. 이게 없으면 아래처럼 가능한 admin이 없다고 comment가 달린다.

Use github hooks for build triggering도 체크한다.

마지막으로 Build로 이동해 테스트 목적으로 hello world를 출력하는 코드를 넣어둔뒤 저장한다.

이제 Pull Request를 발생시키면, ngrok에 POST 요청이 들어오면서 빌드가 진행된다.

Pull Request 페이지에서도 진행중인 모습이 보이게 된다.

완료되었다면 이렇게 바뀐다.

이제 Pull Request시에 빌드를 할 수 있다!


Jenkins Node 설치

vue를 이용해 클라이언트를 제작하던중 배포를 자동화하려고 했다가 부득이한 이유로 빌드를 로컬에서 진행할 수 밖에 없었다. 따라서 빌드를 하기 위해서는 Jenkins내에 nodejs를 설치해야 했다.

cat /etc/passwd

유저목록을 출력해보면 jenkins가 존재한다. 이 말은 빌드가 진행될 때 이 유저가 직접 리포지토리에서 코드를 받아오고 온갖 것들을 다 수행한다는 말이다. 당연히 이 유저는 NodeJS를 모르고 있는 상태다. 설치가 안되어 있으니까.

 

다행히 플러그인으로 NodeJS를 설치할 수 있는 방법이 있다. 설치 가능목록에서 NodeJS를 찾아 설치한다.

 

Jenkins 관리 > Global Tool Configuration 으로 이동하면 NodeJS항목이 보인다. 

내 vue프로젝트의 NodeJS버전과 맞추어 선택하고 저장한다.

 

다시 Jenkins 프로젝트로 돌아와서 빌드환경으로 이동한다.

이렇게 미리 설정해둔 NodeJS를 고르고 shell을 작성하면 된다.

스프레이 칠해둔 곳은 Jenkins 프로젝트의 이름이다. 

 

나중에 Publish Over SSH를 이용할 때 파일을 전송하기 위해서 zip 패키지를 이용해 압축을 해주었다. 

 

zip -r dist dist/*는 dist라는 이름으로, dist 하위의 모든 파일을 압축한다는 내용이다. 

 

다음 포스팅에서는 Publish Over SSH를 이용해 프론트서버에 빌드 결과물을 전송하는 것을 남기겠다.

============================================================================다음 글 → https://10cheon00.tistory.com/5

 

[Jenkins] Github Pull Request Builder 설치 및 project 구성

== Version == Jenkins v2.33.2 Ubuntu 18-04 LTS Ngrok 2.3.40 NodeJS 16.9.0 목표 Github Pull Request Builder 설치, 설정 Freestyle project 생성 후 테스트 Github Pull Request Builder Jenkins 관리 > 플러..

10cheon00.tistory.com

 

댓글