일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- IntelliJ
- Oracle
- jenkins
- Git
- Spring Batch
- java
- Design Patterns
- it
- JVM
- AWS
- ubuntu
- devops
- Web Server
- tool
- elasticsearch
- laravel
- linux
- javascript
- Spring Boot
- springboot
- ReactJS
- 맛집
- php
- Spring
- MySQL
- db
- 요리
- jsp
- redis
- Gradle
- Today
- Total
아무거나
jenkins php 빌드 버저닝 도입 본문
* 버킷경로가 / 로 인하여 명령어가 제대로 실행되지 않을 수 있으므로 주의하자. ( jenkins로 로그인하여 aws configure 설정 필요)
- 패키지 배포 및 버전관리
버전은 크게 major 버전, minor 버전, 패치의 3개의 번호로 부여합니다.
- jenkins프로젝트 관련 버저닝할 폴더 생성, jenkins접속 -> 프로젝트 아이템 설정 -> build -> Execute shell 에 압축 스크립트 작성
[스크립트]
#!/bin/bash
tar -zcvf /usr/share/tomcat8/.jenkins/workspace/chatbot_project/$2/chatbot_$1.tar.gz /usr/share/tomcat8/.jenkins/workspace/chatbot_$3/*
echo "build finish !! [version : $1, buildType : $2, jenkins item : $3] "
*** 쉘스크립트를 젠킨스 아이템별 / 브랜치별 등 조건문을 넣어서 조건에 따른 빌드버전 관리 스크립트를 구성할 수 있다.
[설명]
1. buildType
- develop, qa
2. jenkins project item (static)
- develop
[jenkins execute shell 입력 파라미터 예시]
sh /usr/share/tomcat8/.jenkins/scripts/build_version.sh 0.0.0 ${buildType} develop
스크립트파일 경로 https://github.com/bkjeon1614/devops/tree/master/jenkins
가. 프로젝트별 버저닝(서버에서 관리할 경우)
1. 개발 스크립트[ build_version.sh ]
ex) sh build_version.sh {프로젝트명} {압축파일임시저장폴더명} {젠킨스아이템명}
- sh /usr/share/tomcat8/.jenkins/scripts/build_version.sh chatobt ${buildType} dev
[코드]
#!/bin/bash
if [ $1 = "chatbot" -o $1 = "etc" ]
then
cd $jenkinsDir && tar -zcvf $projectDir/$1_0.0.0.tar.gz $1_$3/*
else
echo "joongna api maintenance"
fi
echo "$1 build finish !! [buildType : $2, jenkins item : $3] "
2. 라이브 스크립트[ live_build_version.sh ]
ex) sh live_build_version.sh {프로젝트명} {젠킨스아이템명} // 개발과는 다르게 압축파일임시저장폴더명 default
- sh /usr/share/tomcat8/.jenkins/scripts/live_build_version.sh chatobt ${buildType} live
[코드내용]
#!/bin/bash
# check
if [ $1 = "chatbot" ]
then
if [ -f "/usr/share/tomcat8/.jenkins/workspace/chatbot_project/live/$1_0.0.0.tar.gz" ]; then
vn=$(cd /usr/share/tomcat8/.jenkins/workspace/$1_project/live/ && ls -td1 *.gz | head -n 1)
vc=$(echo $vn | cut -f 2 -d '_')
vMajor=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[1] }')
vMinor=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[2] }')
vPatch=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[3] }')
# version terms
if [ $vPatch -ge 9 ]
then
vPatch=0
vMinor=$(($vMinor+1))
else
vPatch=$(($vPatch+1))
fi
test1=$vMajor.$vMinor.$vPatch
echo 'test1:'.$test1
if [ $vMinor -ge 9 ]
then
vMinor=0
vMajor=$(($vMajor+1))
fi
test2=$vMajor.$vMinor.$vPatch
echo 'test2:'.$test2
if [ $vMajor -ge 9 ]; then
echo "Major Version Max Error"
fi
version=$vMajor.$vMinor.$vPatch
else
version="0.0.0"
fi
cd /usr/share/tomcat8/.jenkins/workspace && tar -zcvf /usr/share/tomcat8/.jenkins/workspace/$1_project/live/$1_$version.tar.gz $1_$2/*
else
echo "$1 maintenance"
fi
echo "$1 build finish !! [jenkins item : $2 , version : $version ] "
나. 프로젝트별 버저닝(s3+서버+aws-cli)
1. ec2에 aws-cli 설치
- sudo apt-get install awscli
2. credential 설정(배포하는 계정권한으로 할당해줘야됨)
- $ aws configure
AWS Access Key ID [None]: AKIA****************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]: json
$ ls -l ~/.aws
// 결과
-rw------- 1 ec2-user ec2-user 48 1月 30 05:21 config
- set configure
aws configure set aws_access_key_id AKIA****************
aws configure set aws_secret_access_key ****************************************
aws configure set region ap-northeast-1
aws configure set output text
cat ~/.aws/credentials
// 결과
[default]
aws_access_key_id = AKIA****************
aws_secret_access_key = ****************************************
** build 하는 Execute shell 위에 서버에서 배포할때의 스텝 확인
dev - - sh /usr/share/tomcat8/.jenkins/scripts/build_version.sh chatobt dev ${buildType}
live - sh /usr/share/tomcat8/.jenkins/scripts/live_build_version.sh chatobt live ${buildType}
3. 개발버전 스크립트
[코드내용]
#!/bin/bash
if [ $1 = "chatbot" ]
then
#aws config
projectDir="/usr/share/tomcat8/.jenkins/workspace/chatbot_project/$2"
projectVersion="0.0.0"
jenkinsDir="/usr/share/tomcat8/.jenkins/workspace"
s3Buckets="s3://deploy.versioning/project/chatbot/$2/"
s3Region="ap-northeast-2"
cd $jenkinsDir && tar -zcvf $projectDir/$1_$projectVersion.tar.gz $1_$3/*
sudo aws s3 cp $projectDir/chatbot_$projectVersion.tar.gz $s3Buckets --region $s3Region
sudo rm -r $projectDir/chatbot_$projectVersion.tar.gz
else
echo "joongna api maintenance"
fi
echo "$1 build finish !! [buildType : $2, jenkins item : $3] "
4. 라이브버전 스크립트
[코드내용]
#!/bin/bash
# aws config
projectDir="/usr/share/tomcat8/.jenkins/workspace/chatbot_project/live"
current_version="0.0.0"
before_version="0.0.0"
jenkinsDir="/usr/share/tomcat8/.jenkins/workspace"
s3Buckets="s3://deploy.versioning/project/chatbot/live"
s3Region="ap-northeast-2"
# check
if [ -f "$projectDir/current_version.txt" ]
then
before_version=$(cat $projectDir/current_version.txt)
echo "current version : $before_version"
else
echo "0.0.0" > $projectDir/current_version.txt
fi
sudo aws s3 cp $s3Buckets/chatbot_0.0.0.tar.gz $projectDir/chatbot_0.0.0.tar.gz --region $s3Region
sleep 3
sudo aws s3 cp $s3Buckets/chatbot_$before_version.tar.gz $projectDir/chatbot_$before_version.tar.gz --region $s3Region
sleep 3
if [ $1 = "chatbot" ]
then
if [ -f "$projectDir/chatbot_0.0.0.tar.gz" ]; then
vn=$(cd $projectDir/ && ls -td1 *.gz | head -n 1)
vc=$(echo $vn | cut -f 2 -d '_')
vMajor=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[1] }')
vMinor=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[2] }')
vPatch=$(echo $vc | awk '{ split($0, vArr, "."); print vArr[3] }')
# version terms
# patch
if [ $vPatch -ge 9 ]
then
vPatch=0
vMinor=$(($vMinor+1))
else
vPatch=$(($vPatch+1))
fi
# minor
if [ $vMinor -ge 9 ]
then
vMinor=0
vMajor=$(($vMajor+1))
fi
# major
if [ $vMajor -ge 9 ]; then
echo "Major Version Max Error"
fi
current_version=$vMajor.$vMinor.$vPatch
sudo rm -r $projectDir/current_version.txt
echo $current_version > $projectDir/current_version.txt
sudo rm -r $projectDir/chatbot_0.0.0.tar.gz
sudo rm -r $projectDir/chatbot_$before_version.tar.gz
fi
cd $jenkinsDir && tar -zcvf $projectDir/$1_$current_version.tar.gz $1_$2/*
sudo aws s3 cp $projectDir/chatbot_$current_version.tar.gz $s3Buckets/ --region $s3Region
sudo rm -r $projectDir/chatbot_$current_version.tar.gz
else
echo "joongna api maintenance"
fi
echo "$1 build finish !! [jenkins item : $2 , version : $current_version ] "
'Infra > DevOps' 카테고리의 다른 글
jenkins api통신을 통한 호출 (0) | 2019.03.06 |
---|---|
jenkins maven 설정 및 maven 빌드 (0) | 2019.03.06 |
jenkins 빌드실행시 excute shell에 파라미터 받을 수 있는 플러그인 (0) | 2019.03.05 |
jenkins 모니터링 플러그인 설치 (0) | 2019.03.05 |
jenkins 메모리 문제(속도 저하 및 애플리케이션 종료) (0) | 2019.03.05 |