이 글은 소모임을 클론한 프로젝트의 진행에 CI/CD 환경을 적용하기 위한 과정을 기록한 글입니다.
툴은 Jenkins를 사용하며 Docker를 이용해 Jenkins 이미지를 구동하여 환경을 구성합니다.
※ Docker를 통해 Jenkins를 구동하는 과정은 이 글에서는 다루지 않습니다.
Jenkins를 구동하고 최초로 페이지에 접속을 하면 다음과 같은 화면이 나타납니다.
안내대로 나타난 경로의 파일을 확인하면 관리자 비밀번호를 확인할 수 있습니다.
비밀번호를 입력 후 플러그인 구성과 사용자 계정을 생성하면 Jenkins의 Dashboard를 볼 수 있습니다.
먼저 Dashboard에서 새로운 item을 선택하고 Pipeline 프로젝트를 만들어줍니다. 프로젝트가 생성되면 설정 화면이 나타나고 General 탭에서 필요한 설정을 진행합니다.
GitHub project에 체크 후 프로젝트의 url을 넣어줍니다.
Build Triggers 항목에서 GitHub hook trigger for GITScm polling 항목에 체크합니다. 이 항목을 설정하면 Github의 Webhook 기능을 통해 Jenkins가 프로젝트의 변경을 감지해 CI를 진행할 수 있습니다.
Pipeline 항목에서 Definition을 Pipeline script from SCM으로 선택하고 Repository URL과 원하는 Branch 정보를 채워줍니다. Github 프로젝트에서 Jenkinsfile을 가져와 적용할 수 있습니다.
Jenkinsfile을 간단히 설정하여 Repository에 추가합니다.
pipeline {
agent any
stages {
stage('Test') {
steps {
sh './gradlew test' // Test 단계에서 test를 실행합니다.
}
}
stage('Build') {
steps {
sh './gradlew clean build' // Build 단계에서 빌드를 진행합니다.
}
}
}
}
이제 Jenkins에서 빌드를 할 수 있습니다. 지금 빌드를 선택하면 Jenkins에서 빌드를 진행하게 됩니다.
첫 빌드 시도에서 Test 과정이 실패했습니다. 실패한 항목에 마우스를 올리면 Log를 확인할 수 있습니다.
로그 내용을 보면 gradlew를 실행하는데 권한이 없다고 나옵니다.
git ls-tree HEAD
위 명령을 사용해서 gradlew의 권한을 확인하면 644로 실행 권한이 빠져 있습니다.
권한을 부여하기 위해 다음 명령을 실행하고 커밋, 푸시를 진행합니다.
git update-index --add --chmod=+x gradlew
다시 빌드를 진행하면 성공적으로 완료되는 것을 확인할 수 있습니다.
여기까지 Jenkins Pipeline을 통해 빌드를 진행해 봤습니다. 편의상 포스팅의 내용을 나눠 다음 포스팅에서 Github Webhook을 적용해 Pull Request가 발생하면 Jenkins에서 빌드를 진행하도록 해보겠습니다.