본문 바로가기

⭐ CICD/Jenkins

Jenkins Repository 를 Codecommit 저장소로 활용하기

728x90
반응형

# Jenkins 저장소를 Codecommit Repository 저장소로 활용하기

- 보통 CodeCommit에 저장되는 소스가 변경될때 Jnekins를 통해 자동으로 배포를 하기 위한 파이프라인을 구성한다.

가장 중요한 것은 CodeCommit(브랜치)의 코드 변동을 Jenkins가 감지를 해야한다.

그리고 해당 작업은 Amazon CodeCommit, Amazon SNS, Amazon SQS + Jenkins를 사용하여 구현이 가능하다.

- 작업의 구성은 아래와 같다.

CodeCommit에 Trigger를 활용해 SNS를 호출하고, 해당 이벤트를 SQS에 저장하고, 저장된 Queue를 Jenkins가 감지하여 자동으로 빌드되는 구조이다.

- 장점과 단점

장점 : 하나의 SNS/SQS 설정을 통해 복수개의 Repository 이벤트 관리가 가능하다.

단점 : AWS 서비스에 종속됨.

- 그렇다면 이제 작업을 진행해보자.

1. Simple Notification Service(Amazon SNS) Topic 설정

- AWS SNS 서비스로 이동 → 주제 생성을 클릭하여 아래와 같이 설정한다.

- 위와 같이 생성한다. 다른 옵션은 디폴트로 둔다.

2. Simple Queue Service (Amazon SQS) 설정

AWS 서비스에서 AWS SQS를 검색하여 이동 → 대기열 생성을 클릭하여 대기열을 생성한다.

다른 설정값은 변경하지 않고 기본 옵션으로 생성한다.

- AWS SQS 설정하기

SQS에서 구독할 SNS 주제 구독을 앞서 생성한 TOPIC으로 선택한다.

- Amazon SNS 주제 구독을 클릭하여 생성한 SQS 주제를 선택한다.

3. CodeCommit 트리거 설정

CodeCommit에서 이벤트를 감지할 소스 Repository → 설정 → 트리거 메뉴에서 아래와 같이 설정한다.

- 일단 나는 여기서 CodeCommitSourceRepository라는 이름으로 Repository를 생성 하였다.

- 그리고 해당 Repository의 main 브랜치를 생성한다. 그리고 1개의 file을 생성한다. 그럼 main 브랜치가 자동적으로 생성된다.

- 해당 Repository에서 설정 → 트리거 생성을 통해 트리거를 생성한다.

- 트리거 생성을 클릭하면 아래와 같은 화면이 나온다.

4. IAM 사용자 설정 (Credentials)

- Jenkins에서 SQS Access를 위한 보안자격을 생성해야한다. 해당 계정은 AmazonSQS Access 권한이 추가 되어 있어야 한다.

- IAM 권한설정에서 AmazonSQSFullAccess 권한을 아래와 같이 부여한다.

- 그리고 보안자격증명에서 생성한 Access Key ID , Secret access key를 따로 기록해둔다.

5. Jenkins 플러그인 설치

- Jenkins에서 AmazonSQS 연동을 위해서는 별도의 플러그인이 필요하다.

Jenkins 관리 → 플러그인 관리 → AWS CodeCommit Trigger SQS Plugin을 설치한다.

- 플러그인을 설치중인 모습 설치하는데 꽤 시간이 걸린다.

- jenkins plugins 설치 방법

  1. Using the GUI: From your Jenkins dashboard navigate to Manage Jenkins > Manage Plugins and select the Available tab. Locate this plugin by searching for aws-java-sdk.
  2. Using the CLI tool:jenkins-plugin-cli --plugins aws-java-sdk:1.12.529-406.vdeff15e5817d
     
  3. Using direct upload. Download one of the releases and upload it to your Jenkins instance.

6. AWS CodeCommit Trigger SQS Plugin 기본설정 하기

Jenkins 관리 → 시스템 설정 → AWS CodeCommit Trigger SQS Plugin 설정하기 → Add SQS Config 클릭

- 아래의 화면에서 Credentials 부분에서 Add SQS Config를 클릭하여 위에서 생성한 AccessKey와 Secret 키를 입력하여 자격증명을 설정한다.

- AWS CodeCommit Trigger SQS Plugin 설정은 아래와 같이 수행한다.

- Test access를 수행하면 왼쪽에 결과가 표시된다. queue와 정상적으로 연결이 된것을 확인 할 수 있다.

7. 프로젝트 생성 및 설정

- Jenkins에서 새로운 Item → Project (PipeLine 및 Freestyle 에 상관없이 사용이 가능하지만 PipeLine 을 예로 작성 한다.)

- Jenkins Project Pipeline 설정

- Jenkins Build Trigger 설정

- Pipeline 코드에서 사용할 CodeCommit Credencial 를 생성한다.

여기서는 AWS-CodeCommit-Credentials 가 될 것이다.

(아래는 예전 자료...)

- 위와 같이 AWS-CodeCommit-Credentials 정보는 IAM에서 생성한 HTTPS Git 자격 증명을 사용해야 한다.

8. Jenkins Pipeline 코드 작성하기

DashBoard → Pipeline_Name → Pipeline 클릭하여 파이프라인 코드를 작성한다.

- 예제 파이프라인 코드는 아래와 같다.

node {
    stage('Preparation') {
        sh "echo 'Preparation phase'"

        checkout scm: [
            $class           : 'GitSCM',
            userRemoteConfigs: [[url: "https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/{Repository_Name}", credentialsId: "{Credentials_Name}"]], //mins
            branches         : [[name: "refs/heads/main"]],
        ], poll: false
    }

    stage('Build') {
        sh "echo 'Build phase'"
    }

    stage('Results') {
        sh "echo 'Result phase'"
    }
}

- 실제 파이프라인 코드는 아래와 같다.

- 위의 userRemoteConfigs 는 CodeCommit의 저장소 URL이고 credentialsId는 Jenkins 관리의 Credentials의 ID 이다.

node {
    stage('Preparation') {
        sh "echo 'Preparation phase'"

        checkout scm: [
            $class           : 'GitSCM',
            userRemoteConfigs: [[url: "https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/Test-Repository", 
            credentialsId: "aws-codecommit-credentials-test"]], //mins
            branches         : [[name: "refs/heads/main"]],
        ], poll: false
    }

    stage('Build') {
        sh "echo 'Build phase'"
    }

    stage('Results') {
        sh "echo 'Result phase'"
    }
}

9. 빌드 결과 확인

- 빌드 결과 확인 시 아래와 같이 정상적으로 빌드가 된 것을 확인 할 수 있다.

- CodeCommit(Private Repository)에서 Jenkins 파이프라인을 생성하여 코드를 빌드하는 작업을 진행 하였다.

 

- 끝 -

728x90
반응형