Jenkins 트리거 및 Secure Source Manager 웹훅을 사용하여 자동 빌드를 시작할 수 있습니다.
필요한 역할
Jenkins 빌드 트리거를 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
저장소에 대한 Secure Source Manager 저장소 관리자 (
roles/securesourcemanager.repoAdmin
) -
Secure Source Manager 인스턴스 접근자 (
roles/securesourcemanager.instanceAccessor
) Secure Source Manager 인스턴스에 대한 권한
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
Secure Source Manager 역할 부여에 대한 자세한 내용은 IAM으로 액세스 제어 및 사용자에게 인스턴스 액세스 권한 부여를 참고하세요.
웹훅 트리거 설정
Jenkins는 빌드 트리거 플러그인을 사용하여 CI/CD 자동화를 사용 설정합니다. 새 커밋을 저장소에 푸시할 때 또는 pull 요청이 시작될 때와 같은 수신 이벤트를 리슨하고 새 이벤트가 수신되면 빌드를 자동으로 실행하도록 트리거를 구성할 수 있습니다. 또한 모든 소스 저장소 변경사항 또는 특정 기준과 일치하는 변경사항에 따라 코드를 빌드하도록 트리거를 구성할 수 있습니다.
일반 Jenkins 웹훅 트리거를 설정하려면 다음 단계를 따르세요.
Jenkins 서버에 Jenkins Git 플러그인, SSH 사용자 인증 정보 플러그인, 일반 웹훅 트리거 플러그인을 설치합니다.
Jenkins 서버에서 유효한 SSH 키 쌍을 생성합니다. Secure Source Manager는 RSA 유형 키만 지원합니다.
다음 명령어를 실행하여 Secure Source Manager 인스턴스 도메인을 Jenkins 서버 SSH
known_hosts
파일에 추가합니다.ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.dev
각 항목의 의미는 다음과 같습니다.
- INSTANCE_ID은 Secure Source Manager 인스턴스의 이름입니다.
- INSTANCE_PROJECT_NUMBER은 Secure Source Manager 인스턴스의 프로젝트 번호입니다. 프로젝트 번호를 찾을 수 있는 위치에 대한 자세한 내용은 프로젝트 식별을 참고하세요.
예를 들어 다음 명령어는 프로젝트 번호가
123456789
이고 이름이prod-test-instance
인 인스턴스의 인스턴스 도메인을 추가합니다.ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.dev
yes
로 답하여 인스턴스 도메인을 알려진 호스트 목록에 추가합니다.Jenkins 사용자 인증 정보 관리 페이지에서 다음 단계를 따르세요.
- SSH username with private key(비공개 키가 있는 SSH 사용자 이름)를 선택합니다.
- Jenkins 서버 SSH 비공개 키를 붙여넣습니다.
- 종류 드롭다운에서 필요에 따라 다른 필드를 입력합니다.
만들기를 클릭합니다.
Jenkins 웹 인터페이스에서 새 Jenkins 작업을 만듭니다.
Jenkins 작업의 구성 페이지에 있는 소스 코드 관리 섹션에서 Git을 선택합니다.
Git 섹션에서 Secure Source Manager 저장소 SSH URL을 저장소 URL로 붙여넣고 빌드 브랜치 (예:
*/main
)를 입력한 다음 이전에 사용자 인증 정보 관리 페이지에서 추가한 저장된 비공개 SSH 키 사용자 인증 정보를 선택합니다.빌드 트리거 섹션에서 일반 웹훅 트리거를 선택합니다.
선택적으로 호출 시 해당 토큰이 제공된 경우에만 작업이 트리거되도록 토큰을 추가할 수 있습니다. 토큰을 추가하려면 일반 웹훅 트리거 섹션에서 토큰 필드에 토큰을 입력합니다.
빌드 섹션에서 이 Jenkins 작업에 사용할 빌드 스크립트를 제공합니다. 예를 들어
cat README.md
를 실행하여 README.md의 콘텐츠를 출력할 수 있습니다.저장을 클릭하여 Jenkins 작업을 만듭니다.
서비스 계정 설정 및 필수 권한 부여
사용할 서비스 계정이 아직 없으면 서비스 계정을 만듭니다.
서비스 계정에
iam.serviceAccounts.actAs
권한이 있는지 확인합니다. 이 권한은 서비스 계정 사용자(roles/iam.serviceAccountUser
) 역할에 포함되어 있습니다.Secure Source Manager 웹 인터페이스에서
옵션 더보기 메뉴를 클릭합니다.서비스 계정 SSH 키를 클릭합니다. 서비스 계정 SSH 키 페이지가 열리고 추가한 기존 키 목록이 표시됩니다.
키 추가를 클릭합니다.
SSH 키 추가 페이지에서 키에 대해 다음 값을 입력합니다.
서비스 계정: SSH 키를 사용할 서비스 계정의 서비스 계정 이메일(
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
형식)WHERE
SA_NAME
은 서비스 계정 이름입니다.PROJECT_ID
는 서비스 계정이 생성된 프로젝트의 프로젝트 ID입니다.
SSH 공개 키: Jenkins 공개 SSH 키입니다.
Secure Source Manager 서비스 에이전트에 권한 부여
서비스 계정이 Secure Source Manager 인스턴스와 동일한 프로젝트에 없는 경우 Secure Source Manager 서비스 에이전트에 서비스 계정 토큰 생성자 (roles/iam.serviceAccountTokenCreator
) 역할 또는 iam.serviceAccounts.signJwt
권한도 부여해야 합니다.
서비스 계정이 Secure Source Manager 인스턴스와 동일한 프로젝트에 있는 경우 서비스 계정에 저장소 역할 부여로 건너뜁니다.
다음 명령어를 실행하여 서비스 계정의 기존 IAM 정책을 가져옵니다.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format json
여기서 SERVICE_ACCOUNT은 사용할 서비스 계정입니다. 계정은 숫자 서비스 계정 ID 또는 이메일(예:
123456789876543212345
또는my-iam-account@somedomain.com
)로 형식이 지정되어야 합니다.출력에는 기존 바인딩이 포함되며, 바인딩이 없는 경우 다음과 유사한
etag
값이 포함됩니다.{ "etag": "BwUjHYKJUiQ=" }
출력을
policy.json
이라는 새 파일에 복사합니다.Secure Source Manager 서비스 에이전트에 서비스 계정 토큰 생성자 (
roles/iam.ServiceAccountTokenCreator
) 역할을 부여하려면policy.json
을 수정하여 다음을 추가합니다.{ "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" ] }
여기서
INSTANCE_PROJECT_NUMBER
은 Secure Source Manager 인스턴스의 프로젝트 번호입니다.다음 명령어를 실행하여 서비스 계정의 기존 IAM 정책을 바꿉니다.
gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE
다음을 바꿉니다.
- SERVICE_ACCOUNT을 서비스 계정 ID 또는 이메일로 바꿉니다.
- POLICY_FILE을 새 정책이 포함된 JSON 형식 파일의 위치와 이름으로 바꿉니다.
서비스 계정에 저장소 역할 부여
- Secure Source Manager 웹 인터페이스에서 서비스 계정에 권한을 부여할 저장소로 이동합니다.
- 권한 탭을 클릭합니다.
- 사용자 추가를 클릭합니다.
- 주 구성원 추가 필드에 서비스 계정 이메일 주소를 입력합니다.
- 역할 드롭다운 메뉴에서 Secure Source Manager 저장소 리더를 선택합니다.
다음 명령어를 실행하여 서비스 계정에
securesourcemanager.instanceAccessor
역할을 할당합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor
다음을 바꿉니다.
PROJECT_ID
를 Secure Source Manager 인스턴스 프로젝트 ID로 바꿉니다.SA_EMAIL
을 서비스 계정 이메일로 바꿉니다.
웹훅 설정
- Secure Source Manager 웹 인터페이스에서 웹훅을 만들 저장소로 이동합니다.
- 설정을 클릭합니다.
- 웹훅을 클릭한 다음 웹훅 추가를 클릭합니다.
Hook ID 필드에 웹훅의 ID를 입력합니다.
타겟 URL 필드에 Jenkins 트리거 URL을 입력합니다.
Jenkins 트리거를 구성할 때 선택적 토큰을 사용한 경우 Jenkins 트리거 URL의 끝에 해당 토큰이 포함됩니다. 토큰이 유출되지 않도록 대상 URL 끝에서 토큰을 삭제하고 민감한 쿼리 문자열 필드에 복사합니다.
트리거 URL에서 토큰을 찾으려면
token=
로 시작하는 텍스트를 찾으세요.예를 들어 URL이 다음과 같은 경우를 들 수 있습니다.
https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1
타겟 URL 필드에서 물음표로 시작하는
?token=jenkins-job1
부분을 복사하여 삭제합니다. 그런 다음 초기 물음표를 삭제하고 나머지 부분token=jenkins-job1
를 민감한 쿼리 문자열 필드로 이동합니다.트리거 조건 섹션에서 다음 중 하나를 선택합니다.
- 푸시: 저장소로 푸시할 때 트리거됩니다.
- Pull request state changed: pull request 상태가 변경될 때 트리거됩니다.
푸시를 선택한 경우 브랜치 필터 필드에 푸시 이벤트 허용 목록을 입력할 수 있습니다.
브랜치 필터 필드는 glob 패턴을 사용하며 일치하는 브랜치에 대한 작업만 빌드 트리거를 발생시킵니다. 필드가 비어 있거나
*
이면 모든 브랜치의 푸시 이벤트가 보고됩니다.웹훅 추가를 클릭합니다.
웹훅이 웹훅 페이지에 표시됩니다.
웹훅 테스트
- Secure Source Manager 웹훅 페이지에서 테스트할 웹훅을 클릭합니다.
페이지 하단으로 이동하여 전송 테스트를 클릭합니다.
가짜 이벤트가 전송 대기열에 추가됩니다. 배송 기록에 표시되기까지 몇 초 정도 걸릴 수 있습니다.
git
명령어를 사용하여 풀 요청을 푸시하거나 병합하여 웹훅을 테스트할 수도 있습니다.Jenkins 프로젝트의 빌드 기록에서 테스트 이벤트로 트리거된 빌드를 확인합니다.
첫 번째 테스트 전송을 보낸 후 Secure Source Manager 웹훅 페이지의 최근 전송 섹션에서 테스트 전송의 요청 및 응답을 확인할 수도 있습니다.
다음 단계
- Jenkins 문서를 살펴봅니다.