젠킨스는 간단하게 말하면 배포 자동화 도구이다.
크게 순서를 나누면
1. 젠킨스 설치
2. 젠킨스를. 통해 build 및 aws로 배포
github의 스크립트와 차이는 : actions X (tools), secrets X (credential)
1. docker 이미지 가져오기
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins-server jenkins/jenkins:lts
2. 도커 로그를 보시면 가운데에 비밀번호가 있다. 이걸로 로그인 먼저하고 계정을 만들어준다. 계정을 삭제하지 않는 한 아이디 비번은 유지다.
3. localhost8080 들어가서 비밀번호 입력하시면 됩니다.
4. 계정 생성
만들어 줬다 ..
새로운 아이템을 생성해줍니다.
가장 많이쓰는것은 freestyle과 , pipeline이다
freestyle 은 ui로 하는것이고 pipeline 은 스크립트로 하는것이다.
먼저 freestyle로 가보도록 하겠다.
만들고 난 후 dashboard를 눌러서 들어가 왼쪽에 구성을 누르고 설정을 하고 나서 빌드를 하면 된다.
안에 들어가서 구성 누르고, git 주소도 써준다.
두개 추가 해준다.
password는 깃허브에서 토큰을 만든 비밀번호를 넣으면 된다.
branch 는 나는 main이라 main으로 바꿔주었다.
빌드유발
수동으로 일단 빌드하고, 나중에 poll SCM 을 할 예정이다
poll SCM . 은 1분마다 최신화 하는것이다.
내려와서 build Steps를 수정해준다. gradle로 바꿔주고, Tasks도 추가해준다.
빌드 후 조치
아카이브 시킨다는것이다. *.jar 형태로 만든다는 뜻
jenkins 들어가기
들어오면 snapshot이 들어 가 있다
아까 위에서 말한 poll
1분마다 깃허브와 비교해서 올라가게 해보기
H 이 아니라 * 이다.
pipline으로 만들기
여기서 작성을 해주면 된다.
플러그인 깔려 있는지 확인
jdk 도 추가 해줘야한다. 추가를 . 안해주면 찾지 못해서 에러가 날 것이다.
pipeline{
// 어떠한 agent 로도 실행해도 된다는 의미
agent any
triggers{
pollSCM("*/1 * * * *")
}
stages{
stage('Checkout'){
steps{
git url:'https://github.com/fa7271/jenkins_private.git',
credentialsId: 'github_token',
branch: 'main'
}
}
stage('setup jdk 11'){
steps{
script{
def javaHome = tool name: 'JDK11', type: 'jdk'
env.JAVAHOME = "${javaHome}"
env.PATH = "${javaHome}/bin:${env.PATH}"
}
}
}
stage('build with gradle'){
steps{
sh '''
chmod +x ./gradlew || true
./gradlew bootJar
'''
}
}
stage('archive jar'){
steps{
archiveArtifacts artifacts: '**/*.jar', onlyIfSuccessful: true
}
}
}
}
Agent
"agent"는 Jenkins Pipeline 스크립트에서 사용되는 키워드. Jenkins는 자동화된 빌드, 테스트 및 배포 파이프라인을 생성하는 데 사용되는 오픈 소스 자동화 도구 위의 코드에서 "agent any"는 Jenkins가 파이프라인을 실행할 때 사용할 에이전트(또는 노드)를 지정하는 부분입니다. "any"는 모든 에이전트를 사용할 수 있음을 의미하며,
즉 어떤 에이전트든 사용하여 파이프라인을 실행할 수 있다는 것을 나타낸다
EC2 로 해보기
똑같이 pipeline으로 하나 만들어준다.
그 대신 다른 내용은
ssh키로 로그인 . 후scp로 전송하고 ssh로 로그인해서 java jar를 하면 된다.
ec2 인스턴스 만들기, 보안그룹 8081 을 추가해줘야한다.
보안그룹 8081 과 22 는 있어야한다.
연결완료
pipeline{
// 어떠한 agent 로도 실행해도 된다는 의미
agent any
triggers{
pollSCM("*/1 * * * *")
}
stages{
stage('Checkout'){
steps{
git url:'https://github.com/fa7271/jenkins_private.git',
credentialsId: 'github_token',
branch: 'main'
}
}
stage('setup jdk 11'){
steps{
script{
def javaHome = tool name: 'JDK11', type: 'jdk'
env.JAVAHOME = "${javaHome}"
env.PATH = "${javaHome}/bin:${env.PATH}"
}
}
}
stage('build with gradle'){
steps{
sh '''
chmod +x ./gradlew || true
./gradlew bootJar
'''
}
}
stage('deploy to EC2'){
steps{
sshagent(['ec2-ssh-key']){
sh '''
scp -o StrictHostKeyChecking=no /var/jenkins_home/workspace/pipeline_jar_build_ec2/build/libs/*.jar ubuntu@내 ec2 인스턴스:/home/ubuntu/
ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'if ! type java > dev/null; then sudo apt update && sudo apt install openjdk-11-jdk -y; fi'
ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'sudo killall java || true'
ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'sudo nohup java -jar /home/ubuntu/*.jar > /home/ubuntu/app.log 2>&1 &'
'''
}
}
}
}
}
지금 위에 부분은 전송까지만 테스트이다 .ssh 는 밑에서 다시 해보겠다.
ssh agent, ssh Credential 을 젠킨스에서 설치해준다.
설치해준다.
젠킨스 관리에 들어가서 credentials에 들어가서
add credentilas 눌러준다.
key는 permkey를 다 복사해서 붙여넣으면 된다.
이렇게 생성완료.
1개 떠있다
(S3)프론트엔드 배포
nodejs 다운로드, aws 다운로드 해준다
S3를 AWS에 올려야하기때문에 엑세스키,비밀번호, 지역등이 필요하다
S3 IAM 만들어준다.
키는 CLI 하고 나머지는 . 다 default로 간다.
그리고 값 설정해준다.
이런식으로 3개를 넣어주면된다.
2. nodejs installaions 활성화 시키기
스크립트의 이름과 맞춰줘야한다.
s3 버킷도 만들어준다 .
pipeline{
// 어떠한 agent 로도 실행해도 된다는 의미
agent any
triggers{
pollSCM("*/1 * * * *")
}
tools{
// node js 플러그인 설치 및 nnodejs 20 에 대한 version 설정정보
nodejs 'nodejs20'
}
environment{
$AWS_ACCESS_KEY_ID = credentials('$AWS_ACCESS_KEY_ID')
$AWS_SECRET_ACCESS_KEY = credentials('$AWS_SECRET_ACCESS_KEY')
$AWS_REGION = 'ap-northeast-2'
}
stages{
stage('Checkout'){
steps{
git url:'https://github.com/fa7271/vue.git',
credentialsId: 'github_token',
branch: 'main'
}
}
stage('npm install'){
steps{
sh 'npm install'
}
}
stage('npm run build'){
steps{
sh 'npm run build'
}
}
stage('aws cli configure'){
sh '''
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set default.region $AWS_REGION
'''
}
// 전송하기
stage('deploy to s3'){
steps{
sh 'aws s3 cp ./dist s3://boseok-jenkins-build/ --recursive'
}
}
}
}
cli 에러 난다. 설치만 해주면 된다.
- docker exec -u 0 -it jenkins-server /bin/bash # root 접속
- mkdir awscli && cd awscli
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
- unzip awscliv2.zip
- sudo ./aws/install
버킷에 프론트 코드 dist폴더를 추가해주면 된다.
댓글