jenkins로 CI/CD 설정하기 + git secret을 사용한 암호화/복호화

Sechan Beak·2023년 10월 17일
0

전체 프로세스

gpg 와 git secret을 사용한 파일 암호화 -> jenkins에서 secret.key와 ownertrust 파일을 설정하고, 올바른 passphrase를 작성 -> git으로부터 가져온 파일을 복호화

암호화

1. gpg 설치 및 세팅

$ brew install gpg

brew나 apt, yum이든 OS에 맞게 사용해서 설치

$ gpg --gen-key

RealName, Email, Password를 입력, Password는 복호화에 사용되니 기억해야한다.

2. git secret 설치 및 세팅

$ brew install git-secret

git secret 설치

$ git secret init

git 프로젝트 시작하는 것과 비슷하게 init 명령어를 사용해서 git secret을 시작해준다.
해당 명령어를 실행하면 발생하는 일
1. .gitsecret 디렉토리 생성
2. .gitignore .gitsecret/keys/random_seed 라인이 추가된다. 해당 파일말고 나머지는 올려줘야한다.

3. 사용자를 등록

$ git secret tell sangyeon217@gmail.com

4. 암호화 파일 스테이징

$ git secret add application-secret.yml

5. 암호화

$ git secret hide

application-secret.yml -> application-secret.yml.secret 파일이 생성된다.

6. 원격 전송

원본 파일은 gitignore에 추가하고, 암호화된 *.secret 파일은 원격에 올린다. 이 때, .gitsecret/keys/random_seed 파일을 올리지 않도록 주의.

복호화

1. key export

$ gpg -a --export-secret-keys ${email} > gpg-secret.key
$ gpg --export-ownertrust > gpg-ownertrust.txt

${email}에 위에서 등록했던 사용자의 이메일을 입력한다. 입력하지 않으면 모든 키를 내보내고, 이메일을 입력하면 해당 사용자로 등록된 키만을 내보낸다.
-> gpg-secret.key, gpg-ownertrust.txt 파일이 생성된다. 복호화에 사용되는 파일이니, 노출되지 않도록 안전하게 보관.

2. jenkins credentials 생성


Credentails에 들어간다.


Syste -> Global credentails -> add Credentails를 클릭하면 다음과 같은 credentails 등록 화면이 나온다.

여기서 종류를 secret file로 설정하고 scope는 Global로 그대로 냅둔다.
파일선택을 눌러서 gpg-secret.key을 먼저 등록한다. id는 구분자니까 대충 적당히 짓는다.
마찬가지도 똑같이해서 gpg-ownertrust.txt도 등록해준다.

3. freestyle project 생성

git reposiroty를 설정한다.
빌드환경에서 Use secret text(s) or file(s)를 선택, add 를 눌러서 secret file을 선택한다.
Variable: 환경변수명, 적당히 지어준다
Credentials: 아까 등록한 credential을 사용할 수 있다.

이런식으로 gpg-secret.key, gpg-ownertrust.txt를 모두 등록해준다.


혹시 nodeJs 사용한다면, 대쉬보드의 tool 창에서 nodeJs를 설정해주고, project 내부에서 "provide Node & npm bin/folder to Path"옵션을 사용하여 위처럼 등록까지 해준다

4. execute shell

빌드 단계에서 execute shell을 선택하고 추가한다.
Command 박스에 다음 스크립트를 추가한다.

gpg --batch --import $SECRET_KEY
gpg --import-ownertrust $OWNERTRUST
cd $WORKSPACE
git secret reveal -p '${password}'

gpg-secret.key, gpg-ownertrust.txt를 import하여 사용가능하도록 등록해주고, .gitsecret 디렉토리가 있는 위치로 가서 reveal 명령을 실행한다. 이 때, ${password}는 아까 암호화 키 생성에 사용했던 비밀번호를 넣어준다.

5. 나머지 빌드과정

나머지는 적당히 환경에 맞게 빌드해준다.

# 현재 Jenkins 작업 워크스페이스로 이동
cd $WORKSPACE

# docker-compose.yml이 있는지 확인
if [ -f docker-compose.yml ]; then
    # docker-compose를 사용하여 서비스를 빌드하고 실행
    docker-compose down
	docker-compose up --env-file .env.ci --build -d
else
    echo "Error: docker-compose.yml 파일이 존재하지 않습니다."
    exit 1
fi

6. 저장 해주고, 지금 빌드를 클릭해서 빌드가 되는지 확인


잘 된다.

주의사항

당연히 jenkins 서버에도 git secret과 gpg를 설치해야한다. 그리고 gpg의 버전이 일치해야한다.

profile
거사 하나 치르면 올림

0개의 댓글