Git Credentials을 하는 방법은 일반적으로 두 가지가 있습니다.
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
일단 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'
Jenkins에서 자동으로 배포하는 방식은 여러가지 있지만 이번에는 master 브랜치에서 push를 하면 바로 자동 배포되는 설정을 실습해볼려고 합니다.
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 프로젝트에 들어가면
item 프로젝트 구성
에 들어가면
Build Triggers > GitHub hook trigger for GITScm polling
체크해줍니다.
저장후 프로젝트로 돌아가면,
GitHub hook Log
가 나오는 것을 확인할 수 있습니다.
클릭해서 안에 들어가면 이 페이지가 나옵니다!
github-webhook가 정상적으로 돌아가는 것을 여기서도 확인할 수 있습니다.
이제 실제 로컬에서 프로젝트를 push만 하면
push ->(webhook) -> jenkins 자동 빌드
식으로 자동 배포까지 진행될 수 있는 것입니다.
push
After (jenkins 자동 배포)