1. Docker를 설치
2021.04.07 - [AWS/Docker (도커)] - Docker 설치(1부)
2. Jenkins 설치
2021.11.17 - [CI | CD] - Jenkins 설치
3. Git-Hub 저장소 생성
먼저 jenkins에서 빌드할 Github 저장소를 생성해 줍니다. 저장소에는 도커 이미지로 빌드할 때 사용될 dockerfile이 포함되어야 합니다.
2021.11.17 - [CI | CD] - Git Hub와 로컬 폴더를 연동하여 파일 올리기
- 위의 모든 작업을 완료 후 jenkins으로 돌아가 다시 진행 하자.
4. 빌드 환경 구성
- jenkins에서 docker 이미지를 빌드하기 위해서는 별도의 플러그인을 설치 해야 합니다.
- jenkins 플러그인 설치 페이지로 이동 후 docker pipeline 플러그인을 설치 합니다.
- 플러그인 설치 화면 아래와 같이 모든것이 성공으로 확인되어야 정상 작동이 가능하다.
- 다음은 Docker Registry의 인증 정보를 등록합니다.
- Global Credential 페이지로 이동 후 Add Credentials를 클릭해 인증 정보를 등록합시다.
- Add Credentials를 클릭하여 신규 계정을 생성 합니다.
- 여기서 주의 할점은,
Username : dockerhub 의 id
Password : dockerhub 의 패스워드
ID : Jenkinsfile 에서 설정할 CREDENTIAL ID
- 설정 후 계정을 성생 합니다.
5. git 사용 설정
- git을 이용하기 위한 설정을 해보겠습니다.
- 우선 Jenkins가 설치된 서버에 git이 설치되어 있지 않다면 git을 설치합니다.
sudo apt-get install git
etcsw@etcsw-Virtual-Machine:~$ sudo apt-get install git
[sudo] etcsw의 암호:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
패키지 git는 이미 최신 버전입니다 (1:2.25.1-1ubuntu3.2).
git 패키지는 수동설치로 지정합니다.
0개 업그레이드, 0개 새로 설치, 0개 제거 및 71개 업그레이드 안 함.
- 그 후 git exe 경로를 확인합니다.
git --exec-path
etcsw@etcsw-Virtual-Machine:~$ git --exec-path
/usr/lib/git-core
- 다음으로, Jenkins에서 Global tool configuration 페이지로 이동해 Git 항목을 위의 경로로 수정해 줍니다.
- 다음으로 도커 사용 권한입니다.
- 기본적으로 Jenkins에서 바로 docker.sock를 사용할 순 없습니다. 그래서 아래와 같이 사용 권한을 주어야 합니다.
sudo chmod 666 /var/run/docker.sock
6. Jenkins 아이템 생성 및 빌드 수행
- 이제 Jenkins Pipeline을 사용해 빌드를 진행해 보도록 하겠습니다.
"새로운 Item"을 클릭 > "Pipeline"을 선택 > 새로운 아이템을 만듭니다.
- 저장 후 다음 화면으로 이동하면 세부 옵션을 설정할 수 있는 화면이 나옵니다.
- 여기서, "이 빌드는 매개변수가 있습니다" 를 체크하면, 하단에 매개변수를 넣을수 있는 추가 화면이 나옵니다.
- 매개변수 추가 클릭 > String Parameter를 클릭하여 파라미터를 추가 합니다.
- 저장소를 확인해 보셨다면 내부에 ${env.BUILD_NUMBER}를 확인할 수 있습니다.
이 값을 태그로 이용할 것이며 해당 값은 빌드할 때 함께 넘겨줍니다. 이를 위해 매개변수를 정의합니다.
- 파이프라인 탭으로 이동하여, 설정을 진행 합니다.
- "Pipeline script from SCM"을 선택, SCM은 git을 선택 후 리포지토리 주소를 입력하면 됩니다. 해당 리포지토리 내의 "Jenkinsfile"을 파이프라인 스크립트로 사용하겠다는 의미 입니다.
- 저장 후 다음으로 넘어 갑니다.
<소스코드 설명>
- dockerfile
FROM php:5-apache
- Jenkinsfile
node {
stage('========== Clone repository ==========') {
checkout scm
}
stage('========== Build image ==========') {
app = docker.build("may9noy/php-apache") # 저장소
}
stage('========== Push image ==========') {
docker.withRegistry('https://registry.hub.docker.com', 'may9noy') { # Jenkins Credential 정보
app.push("${env.BUILD_NUMBER}") # 빌드 번호
app.push("latest") # 태그 정보
}
}
}
파이프라인의 동작 설명
1. SCM에서 소스코드를 체크아웃받습니다.
2. dockerfile을 이용해 "may9noy/php-apache"라는 이름으로 도커 허브에 이미지를 빌드합니다.
Jenkinsfile에서 push 할 때 이미지 태그를 설정하므로 여기선 이미지 이름만 설정합니다.
3. DockerRegistry에 Credential을 이용해 이미지를 push 합니다.
여기서 앞서 정의한 BUILD_NUMBER가 사용되며 자동으로 latest 태그의 이미지도 함께 push 됩니다.
예를 들어 BUILD_NUMBER에 0.0.1을 입력하고 빌드하면 may9noy/php-apache:0.0.1과 may9noy/php-apache:latest가 push 됩니다.
# 빌드중인 모습
- Stage View에서 본 빌드화면
- 최종적으로 빌드하는데 24초가 걸렸으며, docker hub에 이미지가 정상적으로 생성된것을 확인 할 수 있다.
- 도커 허브 이미지 생성 확인
# 마지막으로 위의 작업을 그림으로 정리해 보면, 아래와 같다.
1. 사용자가 젠킨슨으로 이미지 빌드를 수행하도록 요청
2. 젠킨슨은 이미 구성된 파이프라인과 Jenkinsfile 에 정의된 내용으로 이미지 빌드 및 푸쉬를 수행
3. Docker hub는 앞에서 푸쉬된 이미지를 저장
4. 저장된 이미지를 사용자는 kubernetes 및 docker를 사용하여 서비스 가능
- 지금까지 Jenkins을 활용한 Docker image 빌드에 대해서 알아 보았다.
- CI/CD 파이프라인 기술들을 하나하나씩 익혀보자.
- 끝 -
'⭐ CICD > Jenkins' 카테고리의 다른 글
Jenkins에서 BitBucket 환경 설정 방법 (dev, stg, prd) (0) | 2024.07.01 |
---|---|
Jenkins(Localhost) to ec2 배포하기 (0) | 2023.05.15 |
Jenkins Repository 를 Codecommit 저장소로 활용하기 (0) | 2023.03.15 |
jenkins를 pod로 설치 및 실행하기 (0) | 2023.03.13 |
Jenkins 설치 (0) | 2021.11.17 |