👀 Epilogue
- 현재 프로젝트에 적용할 CD 파이프라인 소개
- 도커 이미지 빌드
- 도커 이미지 Docker Hub Registry에 Push
- Kubernetes Deployment Manifest 파일에 도커 이미지 태그 수정
- ArgoCD가 수정 사항을 감지하여 새로 Push 된 Docker Image를 가지고 배포를 진행한다.
- 이로써 GitOps 환경이 구축이 된다.
- 진짜 역대급으로 힘들었고 시간 많이 잡아먹었던 파이프라인 Stage
- 왜냐고 물으신다면 이 빌드 숫자를 보아하니..^^
⚡ Leggo
- Jenkinsfile
environment{
...
gitToken = credentials('github-repo-access-token')
}
...
stage('Kubernetes Manifest Update'){
steps{
git branch: 'main',
url: '<https://github.com/Cucumber-web/Test-Kubernetes.git>',
credentialsId: 'github-repo-access-token'
sh '''
git config --global user.email "uh9222959@gmail.com"
git config --global user.name "UhyeongJo"
'''
sh "sed -i 's/cucumber-back:.*\\$/cucumber-back:${currentBuild.number}/g' back_deployment.yaml"
sh "git add back_deployment.yaml"
sh "git commit -m '[Update] test-back ${currentBuild.number} image versioning'"
sshagent(credentials: ['****************']){
sh 'git remote set-url origin '
sh "git push origin main"
}
/*
sh '''
git config --global user.email "{e-mail-***}"
git config --global user.name "{username-***}"
'''
sh "sed -i 's/cucumber-back:.*\\$/cucumber-back:${currentBuild.number}/g' back_deployment.yaml"
sh "git add back_deployment.yaml"
sh "git commit -m '[Update] test-back ${currentBuild.number} image versioning'"
sh "git remote set-url origin "
sh "git push --set-upstream origin main"
*/
}
}
▪ 이건 또 하나의 삽질 경험기
- 젠킨스 컨테이너 접속
- 젠킨스 홈 디렉토리에 들어가서 공개-비밀키 쌍을 생성하고 Github의 Secret과 Jenkins의 Credentials로 등록을 해줘야 했다.
- $ kubectl exec -it [jenkins-pod-name] /bin/bash -n [jenkins-namespace]
- 젠킨스 홈 디렉토리에 공개-비밀키 쌍 생성 과정
- $ cd /var/jenkins-home
- $ mkdir .ssh
- $ cd .ssh
- $ ssh-keygen -t rsa -C [github e-mail]
- Enter + Enter + Enter ,,
- id_rsa (private key) → COPY → jenkins credential
- id_rsa.pub (public key) → COPY → github secret
- ssh agent
- 위에서 등록한 Jenkins ssh private key를 가지고 사용 및 활용할 수 있는 agent
... [ssh-agent] Using credentials ***-key [ssh-agent] Looking for ssh-agent implementation... [ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine) $ ssh-agent ...
- credentials에 username이 아니라 ID를 입력해야 함
- Environment Credential Secure
- sh "git remote set-url origin <https://${gitToken}@github.com/Cucumber-web/Test-Kubernetes.git>"
- 현재 Jenkins에서 연결되어 있는 원격 Repository의 주소를 변경하기 위한 명령인데 자꾸 자격 증명 에러가 발생..
- fatal: could not read Username for '<https://github.com>': No such device or address
- Host key verification failed.
- … 아주 다양..
- Github Token을 통하여 이를 해결하였다.
- 그러나 보안 상 Github Token이 환경 변수로 사용하지만 명령어로 유출될 가능성이 있다는 경고 발생
Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
Affected argument(s) used the following variable(s): [gitToken, gitToken_PSW]
- 해결법은 간단하다.
- 큰따옴표 → 작은따옴표
- “sh ~~~ “ → ‘sh ~~~ ‘
- 성공 ~ 😉
'CI/CD' 카테고리의 다른 글
Jenkins Front-End React Build (0) | 2022.12.15 |
---|---|
ArgoCD Application Create (0) | 2022.12.14 |
Jenkins Docker Image Push (0) | 2022.12.14 |
Jenkins Back-End Dockerizing (0) | 2022.12.13 |
Jenkins Back-End Gradle Build (0) | 2022.12.13 |