지난 시간에 jenkins를 container로 동작시키고 플러그인 설치, admin user 생성 등 초기 설정을 진행하였다.
오늘은 flask 코드가 있는 github 레포지토리와 dockerhub를 연동시켜보겠다.
Github token 생성
https://cwpack0730.tistory.com/35
위 링크를 참조해서 github token을 생성한다.
이 token을 가지고 jenkins에 등록하여 인증할 예정이다.
Github,DockerHub 계정 정보 등록
젠킨스 계정 등록 페이지에서 우측 상단 Add Credentials 버튼을 클릭한다.
- 젠킨스 등록 페이지는 대시보드 → jenkins 관리 → Credentials → System → Global credentials 로 진입 가능하다.
- 혹은
{서버IP주소 또는 도메인}:5000/credentials/store/system/domain/_/
해당 링크로도 접근 가능하다.
이후 계정 정보를 등록한다.
Username | 연결할 dockerhub, github id를 입력한다. |
Password | dockerhub 계정의 패스워드를 입력한다. github의 경우 token값을 입력한다. |
ID | jenkins에서 식별할 ID를 입력한다. |
Description | 해당 계정 등록 정보의 설명을 입력한다. |
사진-3을 확인하면 계정 정보 등록이 완료된 것을 확인할 수 있다.
이후 pipeline code를 생성 시 해당 ID를 입력하면 되겠다.
pipeline 생성
젠킨스 대시보드에서 좌측 상단 item 생성을 선택한다.
pipeline을 선택하고 item name을 작성한 뒤, ok를 선택해 pipline을 생성한다.
생성이 잘 되었다.
이제 좌측 구성탭으로 이동한다.
해당 구성 설정만 완료되면 자동 빌드 및 배포가 1차적으로 완성된다.
- 동시 빌드를 허용하는지에 대한 여부이다.
본인은 체크하여 동시 빌드를 허용하지 않는다. - Github 프로젝트 링크를 입력한다.
- 빌드 트리거 중 jenkins 자체 스케쥴을 설정할 수 있다.
구성 완료 후 정상 작동이 확인되면 스케쥴을 추가해 보겠다.
pipeline {
agent any
environment {
repository = "cwpack/cw-cicd-test"
}
stages {
stage('Pull') {
steps {
script {
git credentialsId: 'cwKing_github', url: 'https://github.com/chanW-pack/Auto_Reporting_System.git'
}
}
}
stage('Build and Push') {
steps {
script {
docker.withRegistry('https://index.docker.io/v1/', 'cwKing_dockerhub') {
def appImage = docker.build(repository)
print (appImage)
appImage.push("latest")
}
}
}
}
stage('Deploy') {
steps {
script {
sh(script:'docker-compose up -d production')
}
}
}
}
}
마지막으로 pipeline script를 추가한다.
간단하게 설명하자면 크게 pipeline block으로 이루어지며,
Pull / build and Push / Deploy 3가지 stage로 나누어서 실행된다.
- Pull stage : 등록한 계정 정보(cwKing_github)을 통해 git 저장소에 대하여 인증을 한 뒤 원격 git 저장소로부터 정보를 가져온다.
- Build and Push stage : 등록한 계정 정보(cwKing_dockerhub)을 통해 docker login을 진행하고 가지고 온 프로젝트에서 dockerfile을 실행시켜 이미지를 생성한다.
이후 해당 이미지를 latest 버전으로 dockerhub로 push한다. - Deploy stage : docker-compose 파일을 실행시켜 docker container를 실행(run)한다.
추가로 동작이 실패했을때를 대비하거나 여러 조건에 따른 실행 등 다양하게 커스텀이 가능하다.
자세한 jenkins pipeline의 문법은 다음에 포스팅하여 정리해보도록 하겠다.
'CICD > Jenkins_젠킨스' 카테고리의 다른 글
[CICD] jenkins build & push, 서비스 run(3) (0) | 2023.08.29 |
---|---|
[CICD] jenkins 개념 및 설치(Container)(1) (0) | 2023.08.18 |