-작성한 파이프라인 (도커 이미지 빌드 -> eks 리소스에 접근하여 helm install)
-젠킨슨에 직접 접근하여 aws-cli. kubectl, helm 을 설치하였다.
: kubernates cli plugin 을 사용하여 새로운 계정을 생성한 후 시크릿을 출력하여 크리덴셜에 저장하려 하였으나
eks 에서는 출력이 안되는 모양이다. 결국 kubeconfig 경로를 참조하여 파이프라인을 작성하려 하였으나 쉽지가 않고
eks 이므르 aws cli 를 사용하여 kubeconfig 를 출력하여야 했다.
최초 계획은 podTemplate 를 생성하여 내부 컨테이너 (helm-kubectl) 을 활용하려 하였으나 앞서 말한 /.kube/config 을 플러그인만으로 참조하여 파이프라인을 작성하기에 어려움이 있어 포기했다.
kubernates { 형식으로 컨테이너 (helm-kubectl) 을 실행 후 클러스롤이 바인딩 된 계정의 시크릿 값을 마운트 하려 하였으나 시크릿 값이 docs 처럼 출력이 되지 않아 포기.
aws cli 설치
-kubectl exec -it jenkins-0 -n jenkins -- /bin/bash
-cd /var/jenkins_home
-curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
-unzip awscliv2.zip
-aws/install --install-dir ~/aws-cli
-echo 'export PATH=$PATH:/var/jenkins_home/aws-cli/v2/current/bin' ~/.bashrc
-source ~/.bashrc
-aws configure
kubectl 설치
-kubectl exec -it jenkins-0 -n jenkins -- /bin/bash
-cd /var/jenkins_home
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ chmod +x ./kubectl
$ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
$ kubectl version
aws eks --region ( ) update-kubeconfig --name (eks 이름)
helm 설치
-cd /var/jenkins_home
- curl -fsSL -o helm.tar.gz https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
- tar -zxvf helm.tar.gz
- mkdir helm
- mv linux-amd64/helm helm/
-export PATH="/your/helm/directory:$PATH"
-helm version
파이프라인
pipeline {
agent any
environment {
TAG = 'hi'
AWS_CREDENTIALS_ID = 'aws'
AWS_REGION = 'ap-northeast-2'
ECR_URL = '553186839963.dkr.ecr.ap-northeast-2.amazonaws.com/drogva'
GIT_CREDENTIALS = 'drogva'
CHART_NAME = 'jiral'
KUBE_CONFIG = '/var/jenkins_home/.kube/config'
AWS_CLI_PATH = '/var/jenkins_home/aws-cli/v2/current/bin/aws'
HELM_INSTALL_DIR = '/var/jenkins_home/helm'
}
stages {
stage('Checkout') {
steps {
// Use Kubernetes Service Account Secret
withCredentials([string(credentialsId: '051fff9e-e37e-4306-b8d8-769ec1d6f0b0', variable: 'KUBE_CONFIG')]) {
// Clone the repository for building the image
sh "rm -rf jen && git clone https://github.com/drogva/jen.git"
// Clone the repository for deploying Helm chart
sh "rm -rf jiral && git clone https://github.com/drogva/jiral.git"
}
}
}
stage('Set Execute Permission for Gradle Wrapper') {
steps {
// Give execute permission to the Gradle Wrapper
sh 'chmod +x ./jen/gradlew'
}
}
stage('Login to ECR') {
steps {
// AWS Steps를 사용하여 ECR에 로그인
script {
withAWS(region: "${AWS_REGION}", credentials: "${AWS_CREDENTIALS_ID}") {
ecrLogin()
}
}
}
}
stage('Build and Push image using Jib') {
steps {
script {
// AWS Steps를 사용하여 ECR에 로그인
withAWS(region: "${AWS_REGION}", credentials: "${AWS_CREDENTIALS_ID}") {
env.AWS_REGION = 'ap-northeast-2'
sh 'echo jib build and push'
def ecrLoginResult = ecrLogin()
env.ECR_PASSWORD = ecrLoginResult.split("-p ")[1].split(" ")[0]
sh "./jen/gradlew -p jen jib -Pprofile=prod -Djib.to.image=${ECR_URL}:${TAG} -Djib.to.auth.username=AWS -Djib.to.auth.password=${ECR_PASSWORD}"
}
}
}
}
stage('Deploy Helm Chart') {
steps {
// Add Helm directory to PATH
script {
env.PATH = "${HELM_INSTALL_DIR}:${env.PATH}"
env.PATH = "/var/jenkins_home/aws-cli/v2/current/bin:${env.PATH}"
}
// Use Kubernetes Service Account Secret
withCredentials([string(credentialsId: '051fff9e-e37e-4306-b8d8-769ec1d6f0b0', variable: 'KUBE_CONFIG')]) {
// Set KUBE_CONFIG_PATH directly
sh "export KUBE_CONFIG_PATH=${KUBE_CONFIG}"
// Deploy Helm chart
sh "helm upgrade -i $CHART_NAME ./jiral --kubeconfig=\$KUBE_CONFIG_PATH --debug"
}
}
}
}
}
- 젠킨슨에 root 권한으로 접근 할 수 없고 인터페이스를 깔았다고 하나 /usr/local/bin 에 설치한 것이 아니라 환경변수를 참조하는 방식으로 구성했다. env 로 구성 안하면 권한이 없어 eks 에 리소스를 생성할 수 없다.
젠킨슨을 활용해 helm 배포하기 (0) | 2024.03.20 |
---|