현재 진행 중인 프로젝트에서 사용할 CI라인을 구축하였다.
현재 내가 담당한 파트는 배포로, 쉘 스크립트를 포함한 이미지를 베이스로 job을 실행하여 svc와 deployment를 배포한다.
매번 쉘을 수정하고 이미지를 빌드하고 push하는 과정이 귀찮고 힘들어서 CI라인으로 구축하게 되었다.
현재 bastion host에서 팀원들이 함께 작업을 하고 있기에 여러 계정의 git을 사용할 수 있는 환경이 필요했다.
그렇기에 여기서 여러 git 계정 설정도 다룬다.
git repo를 처음엔 public으로 했으나 보안적인 측면으로 인해 private로 구성했다.
하나의 컴퓨터에서 여러 계정의 Git 사용하기
Github의 여러 계정을 사용하기 위해서는 ssh로 설정한다.
보통 "git config --global user.name"과 같은 명령으로 config를 등록한다.
이는 ~/.gitconfig에 저장되고 관리된다. 여기에 여러 계정을 설정해주면 된다.
순서는 다음과 같다.
- ssh key 생성
- github에 키 등록
- ssh config 설정
- 테스트
ssh key 생성
ssh 디렉토리로 먼저 이동한다.
$ cd ~/.ssh/
github 이메일을 사용하여 ssh key를 생성한다.
ssh-keygen -t rsa -C "user1@example.com"
이렇게 치면 아래에 file key와 passphrase를 설정할 수 있다.
입력을 다하면 해당 디렉토리에 파일이 생성된다.
~/.ssh$ ls
authorized_keys config id_rsa id_rsa.pub id_rsa_seomj id_rsa_seomj.pub known_hosts
id_rsa_seomj와 id_ras_seomj.pub이 생성된 것을 확인할 수 있다.
ssh 에이전트를 시작하는 명령어
*ssh 에이전트: Secure Shell 키 및 인증 관리를 돕는 유틸리티
주요 목적은 프라이빗 SSH 키를 관리하고, 이러한 키에 대한 액세스를 보안적으로 관리하여 사용자가 매번 암호를 다시 입력하지 않아도 원격 서버에 안전하게 인증할 수 있게 하는 것
~/.ssh$ eval "$(ssh-agent -s)"
ssh key를 에이전트에 등록한다.
~/.ssh$ ssh-add ~/.ssh/id_rsa_seomj
Github 공개키 등록
공개키를 복사하여 github에 넣어주면 된다.
공개키를 먼저 확인해보자.
~/.ssh$ cat id_rsa_seomj.pub
해당 값을 그대로 복사하여 github에 적용하면 된다.
github.com > settings > SSH and GPG keys > New SSH keys
ssh config 파일 설정
나같은 경우는 ssh config 파일이 존재하지 않아 생성했다.
~/.ssh$ vi ~/.ssh/config
Host github.com-seomj
Hostname github.com
User seomj
IdentityFile ~/.ssh/id_rsa_seomj
Host는 저장소 주소를 불러올 때 사용되는 값이다.
IdentityFile은 ssh key의 경로이다.
Host의 값은 아래에서 어떻게 쓰이는지 확인이 가능하다.
테스트
~/.ssh$ ssh -T git@github.com-seomj
Hi seomj! You've successfully authenticated, but GitHub does not provide shell access.
이러한 문장이 나오면 정상적으로 연결이 된 것이다.
나는 local에서 프로젝트를 만들고 github에 repository를 생성해서 연결하였다.
git repository를 생성하고 나서 ssh로 설정한 뒤 웹에서 하라는 대로 진행하면 된다.
$ git remote add origin git@github.com-user1:user1/저장소명.git
해당 화면을 보여주기 위해 테스트용 a라는 repo를 생성해 보았다.
ssh로 설정한 후 나와있는 대로 진행하면 된다.
그러나, git config --global이 설정되어 있어서 인지 개인 계정이 아닌 다른 계정으로 commit, push가 발생하는 현상이 나타났다.
이는 아래처럼 git repository마다 계정을 다르게 사용하기 위해 로컬 설정을 따로 해주면 된다.
git config --local user.name "seomj"
git config --local user.email "user1@example.com"
Private repository와 Jenkins 연동하기
프라이빗 저장소를 Jenkins와 연동하는 방법으로는 크게 2가지가 있다.
ssh key 사용하는 방법과 token 사용하는 방법이 존재하며, 여기서는 token을 사용하여 연동한다.
순서는 다음과 같다.
- Github Access Token 생성
- Jenkins Credential 생성
- Jenkins 시스템 설정
- Jenkins pipeline 생성
Github Access Token 생성
github.com > Settings > Developer settings > Personal access tokens > Tokens(classic)
Generate new token > Generate new token(classic)
repo와 repo_hook에 대한 권한을 부여한 token을 발급받는다.
발급받은 token 값은 다시 확인이 불가하니 복사하여 잘 저장해두자.
Jenkins Credential 생성
Dashboard > Jenkins 관리 > Credentials > (global) > Add Credentials
Secret에 token 값을 넣어주어 생성한다.
해당 Credential는 token을 위한 credential이다.
다음은 github account를 위한 credential을 생성하자.
여기서 Username에는 실제 github에서 사용하는 user name을 입력해야 한다.
password에는 위에서 발급받은 token 값을 입력한다.
Jenkins 시스템 설정
Dashboard > Jenkins 관리 > System > Github
api url은 default 값으로 설정한다.
credentials는 token에 대한 credential을 선택한다.
아래에 Test connection을 눌렀을 때 사진처럼 되면 연결에 성공한 것이다.
Jenkins pipeline 생성
새로운 Item > Pipeline
이렇게 설정하면 잘 작동이 된다.
참고
'Study > Git' 카테고리의 다른 글
[Git]Branch 관리 및 병합 (0) | 2023.02.10 |
---|---|
[Git]Git 기초(Remote Repository)(feat. github token) (0) | 2023.02.10 |
[Git]Git 기초(Local Repository) (0) | 2023.02.06 |
[Git]Git 기본(추가 작성 중) (0) | 2021.08.18 |