Jenkins Gitea 연동은 이전 게시물 참고.
Webhook 설정
- Gitea 웹훅을 설정하여 코드 변경이 있을 때 Jenkins에서 자동으로 파이프라인을 트리거 하도록 한다.
- 내 repo에서 설정 -> 웹훅 -> Webhook 추가 -> Gitea를 선택한다.
Gitea Webhook 작성
- 대상 URL은 아래와 같은 형식으로 작성한다.
http://{젠킨스주소}/multibranch-webhook-trigger/invoke?token={Scan by webhook값}
- 아래와 같이 작성하였다면 Webhook 추가를 눌러준다.
- 본인의 경우 Gitea와 같은 클러스터에 있기 때문에 내부 클러스터를 통해 접근하였다.
- token은 전에 설정한 Scan by Token 값이다.
Deliveries
- 전달 시험을 눌러 응답을 확인한다.
- status가 200이면 웹훅이 잘 설정된 것이다.
응답이 잘 나오지 않은 경우 Trouble Shooting을 정리해놨다. 참고
Pipeline 구축
내가 구축할 Pipeline은 위의 그림과 같다.
- 코드 수정 시 Gitea에서 jenkins로 웹훅을 날린다.
- jenkins는 컨테이너를 빌드한다.
- 컨테이너 이미지를 harbor로 push한다.
- harbor는 argo로 컨테이너 이미지를 업데이트한다.
# Jenkinsfile
pipeline {
agent {
kubernetes {
inheritFrom 'default'
defaultContainer 'jnlp'
containerTemplate {
name 'podman'
image 'quay.io/podman/stable:latest'
ttyEnabled true
command 'cat'
privileged true
}
}
}
environment {
GIT_REPO = 'http://gitea-http.common.svc.cluster.local:3000/student/front-end-haho.git'
DOCKER_REGISTRY = 'harbor-core.common.svc.cluster.local'
IMAGE_NAME = 'haho'
HARBOR_REGISTRY = 'front-end-haho'
HARBOR_USERNAME = 'student'
HARBOR_PASSWORD = 'Okestro2018!'
BUILD_NUMBER = "${env.BUILD_NUMBER}"
TAG_NAME = "SNAPSHOT-${BUILD_NUMBER}"
}
stages {
stage('Update DNS') {
steps {
container('podman') {
sh '''
echo "10.0.27.242 harbor.okestro.io" >> /etc/hosts
'''
}
}
}
stage('Clone Repository') {
steps {
container('git') {
git branch: 'main', url: "${GIT_REPO}"
}
}
}
stage('Build Docker Image') {
steps {
container('podman') {
sh '''
podman build -t $DOCKER_REGISTRY/$IMAGE_NAME:$TAG_NAME -f ./Dockerfile .
'''
}
}
}
stage('Harbor Login') {
steps {
container('podman') {
sh '''
podman login $DOCKER_REGISTRY -u $HARBOR_USERNAME -p $HARBOR_PASSWORD --tls-verify=false
'''
}
}
}
stage('Tag & Push Latest Docker Image') {
steps {
container('podman') {
sh '''
podman tag $IMAGE_NAME:$TAG_NAME $DOCKER_REGISTRY/$HARBOR_REGISTRY/$IMAGE_NAME:$TAG_NAME
podman push $DOCKER_REGISTRY/$HARBOR_REGISTRY/$IMAGE_NAME:$TAG_NAME --tls-verify=false
'''
}
}
}
}
post {
success {
echo 'Build and push to Harbor successful'
}
failure {
echo 'Build or push failed'
}
}
}
- 가장 먼저 외부로 접근해야하기 때문에 DNS 설정을 한다.
- 수정된 코드를 가져오기 위해 git clone을 한다.
- podman으로 가져온 코드를 빌드한다.
- harbor에 push하기 위해 harbor에 login인을 한다.
- podman을 통해 tagging을 하고, harbor에 push한다.
- 수정된 pipeline을 Jenkinsfile에 작성하고 push한다면 stage view에서 진행 상태를 확인할 수 있다.
- harbor에 push가 된 것을 확인할 수 있다.
Argocd Helm 배포 및 동기화는 다음 게시물 참고.
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] CI/CD구성하기(Jenkins, ArgoCD, Gitea, Harbor) #4 ArgoCD Helm 등록 및 동기화 (0) | 2024.08.29 |
---|---|
[Kubernetes] CI/CD구성하기(Jenkins, ArgoCD, Gitea, Harbor) #2 Jenkins, Gitea 연동 (0) | 2024.08.13 |
[Kubernetes] CI/CD구성하기(Jenkins, ArgoCD, Gitea, Harbor) #1 배포 (0) | 2024.08.12 |
[Kubernetes] kube config를 통해 외부 클러스터를 로컬 클러스터에서 실행하기 (0) | 2024.08.07 |
[Kubernetes] Ingress를 이용하여 Jenkins 구축 (0) | 2024.08.05 |