Jenkins Git Credentials & Github webhook 설정

devdo·2022년 2월 24일
0

Jenkins

목록 보기
6/8
post-thumbnail

Git Credentials

Git Credentials을 하는 방법은 일반적으로 두 가지가 있습니다.

1) Github Personal Access Tokens

Username은 github 아이디를 적어주면 됩니다.
Password는 Git Personal Access Tokens로 하면 됩니다.

Git Personal Access Tokens 생성 방식은 이 블로그를 참조하시면 됩니다.
https://velog.io/@mooh2jj/Git-Personal-access-tokens-처리remote-No-anonymous-write-access

ID는 임의로 정해주면 됩니다.

저는 jenkins 경우의 git webhook 권한이 필요했습니다.
expiration 기한은 본인의 상황에 맞게 정하면 됩니다.
레포지코리의 권한 repo 전체를 누르고 admin:repo_hook을 클릭했습니다.

Credentials > Kind (Username with password)를 선택합니다.

Password에 git에 만든 Personal access token 값을 입력합니다.

향후 이를 사용할 때
Credentials selectbox에서 이 key를 선택해주면 됩니다.

jenkins pipeline에서는
git url 구조는 아래와 같아야 합니다.
기본 git주소 앞에 <access token>@를 붙여주면 됩니다.

https://<access token>@github.com/<team>/<repo>.git

2) GitHub Jenkins SSH Deploy key

일단 Github에 들어가서 Jenkins SSH로 연동할 수 있는 Deploy keys를 생성해주어야 합니다.

Jenkins의 공개키/개인키를 생성해서 만드는 것인데

💥jenkins docker 컨테이너 안에서 실행해야 한다!

ssh-keygen -t rsa -b 4096

cat /root/.ssh/id_rsa.pub

cat /root/.ssh/id_rsa

ssh -vT git@github.com
- yes

Git Repostitory SSH키 등록 방법은 다음과 같습니다.

해당 Git Repostitory > Settings > Deploy keys 에 들어갑니다.

그다음 Add deploy key 버튼을 눌러줍니다.

그다음 jenkins 공개키를 등록해줍니다. Title은 임의로 정해줍니다.

그러면 정상적으로 jenkins 가 SSH로 Github에 연동할 수 있는 Deploy keys가 생성됩니다.

참고 : https://smoh.tistory.com/332


그래서 Github의 Deploy keys를 등록하고 나면 jenkins 페이지에 다시 들어갑니다.

Jenkins 관리 > Manage Credentials 에서 들어갑니다.

그다음 Global credentials (unrestricted) 으로 쭉 가줍니다.
왼쪽에 Add Credentials를 눌러줍니다.

Kind 를 SSH Username with private key 로 바꿔줍니다.

여기에 Jenkins의 개인키를 등록합니다.

ID와 Username은 credentials의 식별자로서 임의로 넣어주시면 됩니다.

그다음 Jenkins Job 소스 코드 관리에서 가서 Git Repository의 SSH 주소를 가져와 줍니다. 그리고

오류코드 없이 정상적으로 해당 git 프로젝트가 jenkins와 ssh로 연동되는 것을 확인할 수 있습니다.

ssh credentialsId 방법 안됨?

No ECDSA host key is known for github.com and you have requested strict checking.
Host key verification failed.

💥 ssh -vT git@github.com 를 안해줘서!

# git ssh 식별자ID : jenkins-private-key
# ssh credentials 표현식은 이상태, 
# url은 꼭 ssh 형태로
git branch: 'master',
    credentialsId: 'jenkins-private-deploy-key',
    url: 'ssh://git@github.com:mooh2jj/board_vue_backend.git' 


Github의 Webhooks

Jenkins에서 자동으로 배포하는 방식은 여러가지 있지만 이번에는 master 브랜치에서 push를 하면 바로 자동 배포되는 설정을 실습해볼려고 합니다.


Webhooks 설정

Github에 가서 이 레포지러티의 설정(Settings)으로 들어갑니다.

Settings > Webhooks

그다음 Webhooks에 들어갑니다.

Add webhook 버튼을 눌러줍니다.

그럼 아래 화면이 나오는데 Payload URL에서 Jenkins 인스턴스 IP주소 또는 도메인 주소가 필요합니다.

AWS EC2 퍼블릭 IP주소를 copy하세요.

http://{jenkins ip주소}:[jenkins 포트번호]/github-webhook/

ex. http://15.164.99.241:8080/github-webhook/

github-webhook/ 마지막 꼭 넣어주세요!

그리고 ContentType : application/json으로 해줍니다.

그다음 저장하면 되는데
아래에 Recent Deliveries 초록색 체크표시가 떠야 제대로 등록된 것입니다! 안되면 빨간색 표시가 나오고 다시 하셔야 합니다!
=> 안된 상태에서 될 수도 있는데 그럴 땐 되는데도 빨간색 표시가 나올 수 있습니다.

git commit&push 후 jenkins에 보낼 webhook이 갔는지/안갔는지 확인하고자 한다면 탭에 Recent Deliveries에서 확인할 수도 있습니다.


Jenkins 프로젝트 설정

자 그러면 Jenkins 프로젝트에 들어가면

item 프로젝트 구성에 들어가면
Build Triggers > GitHub hook trigger for GITScm polling 체크해줍니다.

Build Trggers 설정

저장후 프로젝트로 돌아가면,
GitHub hook Log가 나오는 것을 확인할 수 있습니다.

클릭해서 안에 들어가면 이 페이지가 나옵니다!

github-webhook가 정상적으로 돌아가는 것을 여기서도 확인할 수 있습니다.

이제 실제 로컬에서 프로젝트를 push만 하면
push ->(webhook) -> jenkins 자동 빌드
식으로 자동 배포까지 진행될 수 있는 것입니다.

  • Before

  • push

  • After (jenkins 자동 배포)



참고

profile
배운 것을 기록합니다.

0개의 댓글