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
로컬에서 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가 일어날 때 빌드를 못하고 있었다.
찾아보니 설정을 약간 다르게 해야했다. 만약 위 방법대로 설정했는데 제대로 빌드가 되지 않는다면 아래 링크를 확인해 진행하면 되겠다.
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를 설치해야 했다.
유저목록을 출력해보면 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
'프로그래밍 > 웹서버' 카테고리의 다른 글
[Django] 게시글에 이미지를 보여주기 위해 겪은 일 (1) | 2022.10.08 |
---|---|
[Jenkins] Publish Over SSH 설치 및 project 구성 (0) | 2022.04.11 |
[Jenkins] 설치 및 Github와 연동, Ngrok을 이용해 공인 Url받기 (0) | 2022.04.10 |
AWS 프리티어 + Nginx + uWSGI + Django 설치 (0) | 2022.04.06 |
댓글