2024. 11. 22. 16:42ㆍ젠킨스
1. 젠킨스 도커 실행
2. VM 내부로 들어가자
3. password입력
- 젠킨스
블럭이 나눠져있따.
각 스테이지별로 블럭을 정의해서 시킨다.
스테이지에 이름을 정의한것이 블럭으로 생성된다. ( 이 블럭하나하나가 스테이지)
- 상태체크, 코드 품질검사, 보안 취약성 검사, 워크스페이스 준비, 베이스 이미지(도커 레지스트리에서 컨테이너를 끌고오는것), 도커 이미지 빌드 ssh가 있다. ( 젠킨스가 특정 타겟서비스에 들어와서 도커를 띄우는것) ,
서버하나에 젠킨스 설치 > 서버2에다가 젠킨스 스크립트를 이용해서 원하는 명령어를 접속해서 실행을 시켜나가는것.
- 특정 개발 자체가 발생한다. 우리가 저번에들었던 브랜치 전략에 준해서 데브마스터에 머지가 되었따 > 데브 젠킨스 가 있는것처럼 > 브랜치 별로 젠킨스 파일을 가져다가 실행
크레덴셜을 만들수 있다.
ssh를 들어갈때 paswwrod로 들어가는 경우도 있지만 rsa private key같은ㄱ것으로 사용할 수 있다.
> AWS는 이런것들을 같이 생성해준다.
> 이정보를 private KEy에 입력을 해준다.
> RSA패킷에 private, public key두개가 생성이 된다. 입력은 private key
>> ssh로 다른 서버에 접근하기위해 사용
로컬에서 사용할거면 쓸 필요가 없지만 다른서버에 배포해야하기때문에 이 기능을 사용한다.
파이프라인 - 젠킨스 형식은 Groovy라고 한다.
jenkins pipeline example github을 참고하자
- 배포할때는 master기준으로 한다. ( -
- tar : 압축
- scp -> 파일을 전송
/home/ubuntu > 깃프로젝트 압축파일이 서버2로 배포하고자하는 파일을 옮긴다.
정리
[Jenkins]
- 깃에서 레포를 끌고와서 젠킨스가 aws로 옮겨준다 ( 다른서버)
-> 베포를 한다면 서버1의 젠킨스에서 파이프라인을 가져와야한다. ( 파일만 옮기면 안되고 컨테이너를 띄워야 한다. )
도커 컴포즈 : 컨테이너로 여러가지 이뤄진것처럼 컨트롤타워로 동시에 한번에 실행시키고 다운시키고 하는것
docker run, docker compose up -> git action은 선택(운영, 개발이 분리되어있기 때문에)
> 업데이트 하자마자 치면 오류가 생기기 떄문에 > 깃액션을 뺴고젠킨스 파이프라는 것을 누르면 제 3자가 운영을 눌렀을때 오류가 생겨도 함부러할 수 없게
#build/dev-Jenkinsfile
pipeline{
agent any
environment {
//Prepare Workspace in Target Server
JENKINS_PRJ_NAME = "app-pipeline"
//Git Project
GIT_MAIN_NAME = "example"
GIT_PRJ_NAME = "example_front"
GIT_BRANCH_NAME = "devmaster"
NODE_BASE_IMAGE = "node:18-alpine"
NGINX_BASE_IMAGE = "nginx:latest"
IMAGE_TAG = "3.8-slim-buster"
SSH_USER = "ubuntu"
SSH_HOST = "ec2-15-148-90-78.ap-northeast-3.compute.amazonaws.com"
}
stages {
stage('Clone Source in Jenkins') {
steps {
script {
echo "--------------------"
echo "[Clone Source in Jenkins]"
echo "--------------------"
sh "git clone --branch ${GIT_BRANCH_NAME} https://github.com/${GIT_MAIN_NAME}/${GIT_PRJ_NAME}.git"
}
}
}
stage('Prepare Workspace in Target Server') {
steps {
echo "--------------------"
echo "[Prepare Workspace in Target Server]"
echo "--------------------"
sh 'echo "Current path: $(pwd)"'
sh "ls -l"
sh "rm -rf tmp"
sh "echo '--------------------'"
sh "tar -cvf ${GIT_PRJ_NAME}.tar ${GIT_PRJ_NAME}"
sh "rm -rf ${GIT_PRJ_NAME} && ls -l"
sh "echo '--------------------'"
script {
sshagent(credentials: [ 'jenkins_ssh_key' ]) {
sh """
scp -o StrictHostKeyChecking=no ${GIT_PRJ_NAME}.tar ${SSH_USER}@${SSH_HOST}:/home/ubuntu
"""
sh """
ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} '
tar -xvf ${GIT_PRJ_NAME}.tar'
"""
}
}
}
}
stage('Pull Base Images') {
steps {
script {
echo "--------------------"
echo "[Pull Base Images]"
echo "--------------------"
sshagent(credentials: [ 'jenkins_ssh_key' ]) {
sh """#!/bin/sh
ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} '
base_images=()
for i in "${NGINX_BASE_IMAGE}" "${NODE_BASE_IMAGE}"; do
base_images+=("\$i")
done
for image in "\${base_images[@]}"; do
sudo docker pull "\$image"
done'
"""
}
}
}
}
stage('Build & Deploy') {
steps {
script {
echo "--------------------"
echo "[Build & Deploy]"
echo "--------------------"
sshagent(credentials: [ 'jenkins_ssh_key' ]) {
sh """
ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} '
cd ${GIT_PRJ_NAME} && sudo docker-compose up -d'
"""
}
}
}
}
}
post {
always {
cleanWs()
}
}
}
- pipeline from SCM
> Github,
> Credentials > 키 입력 : 깃과 젠킨스가 통신하기 위한 키
- Branch Specifier
> dev Jenkins > > 젠킨스 파이프라인이 수정이되면 젠킨스 폴더 안에있는 젠킨스 스크립트를 끌어와서 자동업데이트를 해준다.
- ScriptPath 에 / */build/dev-Jenkinsfile > 스크립트 경로
- public branch를 사용해야함
- private branch 이면 안된다.
> 만약 private를 사용하고싶으면 따로설정을 해야한다.
>> credential Id를 설정해주면된다.
>>> 즉 특정 plugin이 필요할거고 ssh Agent가 그중 하나일 수도 있다.
>>>> 이걸해야 플러그인을 사용할 수 있다 .( 라이브러리라고 보면됨 )
rsa.pub ~/.ss ... > public key 입력
credential -> private - pricate key 입력