NH 저축 IFRS 차세대 프로젝트를 진행하면서 개발서버 반영에 상당한 불편함을 겪었다.
같은 서버에 컨터이너만 다르게 두가지 프로젝트가 같이 진행되고 있었기에
FTP로 수정된 파일을 일일이 업로드 해서 반영을 해야하는상황
도저히 귀찮아서 결국 쉘 스크립트를 작성하기로했다. 짬나는 시간에 급하게 짠 감이 있어서 손 볼 부분이 꽤 있겠지만
추후에 스크립트 작성에 참고하고자 게시글을 작성한다. 참고) ksh 을 사용
* 본 포스팅에서는 기본적인 shell 문법이나 powershell 문법에 대해서는 따로 다루지 않음
<개발서버 shell>
# !/usr/bin/ksh
echo “Operating… Copy file…”
#복사할파일 위치 ( 업무구분 폴더가 분류되어서 존재하는 위치)
fileLocation=“/lmapp/lombas/deploy_sh_auto”
#붙여넣기 될 파일들의 각각위치 ( jsp, js, java, xlm …)
savePathJS=“/lmapp/lombas/webapp/biz/scripts”
savePathJSP=“/lmapp/lombas/webapp/biz/scripts”
savePathFrm=“/lmapp/lombas/frm”
savePathOnline=“/lmapp/dev-lombas/src/com/lombas”
savePathBatch=“/lmapp/dev-lombas/src/com/lombas/batch”
#파일위치에서 파일별loop
for entry in $fileLocation/*
do
filename=$entry
#구분 분리
cop=$(echo $entry | cut -d ‘/‘ -f2)
#디렉토리여부 체크
if [ -d $filename ];then
#업무구분 분리
bizCop=$(echo $entry | cut -d ‘/‘ -f5)
echo “####”$bizCop”####”
#파일여부 체크
if [ -f $fileLocation/$bizCop/* ];then
for name in $fileLocation/$bizCop/*
do
fileN=$(echo $name | cut -d ‘/‘ -f6)
echo “file name : “$fileN
fileEx=$(echo $name | cut -d ‘.’ -f2)
if [ -n $fileEx ];then
$movePath
if [ $fileEx == “js” ];then
movePath=$savePathJS/$bizCop/
elif [ $fileEx == “jsp” ];then
…
#업무 구분에 따른 붙여넣기 대상 PATH 입력
…
if [ -n $movePath ]; then
cp $name $movePath
rm $name
fi
unset movePath
fi
done
fi
fi
done
#빌드까지
echo $(ant -buildfile /lmapp/dev-lombas/build.xml)
#서버재기동
echo $(/lmapp/lombas/bin/restartcon2.sh)
초기에 윈도우에 있는 파일 중에 어떤것들을 수정 대상으로 잡을까 고민을 해보고 직접 사용도 해본 결과
최초에는 업무 구분을 입력받고 해당 폴더의 관련 파일들만 불러왔으나
xml 파일은 테이블 단위의 이름으로 되어있어 해당 파일을 불러오기 힘든 경우가 생겼다.
(시간이 더 여유가 있었다면 파일을 읽어와서 해당 파일에서 사용하는 테이블 명의 xml 파일을 가져오는 부분을 추가했으면 좋았을거 같다)
결국 더 편리하고 빠르게 사용 할 수 있는 방법이
수정된 날짜를 기준으로 배포 대상 폴더를 만들어주는것이라는 생각이 들었고 구현했다.
<윈도우 powershell>
$pastePath = “C:\projects\Shell\deployList\”
$inputDate = Read-Host “몇일전까지의 수정본을 사용 할것인지 입력 “
Write-Host $inputDate “일 전부터 수정된 항목들을 전부 읽어옵니다.”
$onlinePath = “C:\projects\nhsb_new\dev-lombas\src\com\lombas\”
$screenPath = “C:\projects\nhsb_new\runtime\webapp\biz\”
.
.
.
$todayMove = @((Dir $onlinePath -Recurse | Where-Object {($_.LastWriteTime -gt (Get-Date).AddADays(-$inputDate).date -and $_.Extension -ne “”)}).FullName)
$todayMove += (Dir $screenPath -Recurse | Where-Object {($_.LastWriteTime -gt (Get-Date).AddADays(-$inputDate).date -and $_.Extension -ne “”)}).FullName
.
.
.
RD $pastePath* -Recurse
foreach( $node in $todayMove)
{
if($node)
{
echo $node
$nodeSplit = $node.Split(“\”)
$bizCop = “”
if($nodeSplit[7] -eq “batch”)
{
$bizCop = $nodeSplit[9]
}
else
{
$bizCop = nodeSplit[7]
}
$bizCop += “\”
$copyPath = $pastePath + $bizCop
#폴더 없을 시 생성
if( -not (Test-Path $copyPath )){New-Item $copyPath -Type Directory | Out-Null}
Copy $node $copyPath
}
}
powershell 이 확실히 에러도 잘 잡아주고 편리하다는걸 느꼈다..
++후기
좋은 기회에 shell 관련 기본적인 script 작성을 해보니 쉘환경에서의 vi 에디터로 작성하는 쉘은 정말…
에러가 나도 잡기도 힘들고 띄어쓰기 하나하나에도 모든 심혈을 기울여야해서 상당히 까다로운 녀석임을 느꼈다..
추후에 이번 경험이 도움이 될것으로 예상된다.
'기록' 카테고리의 다른 글
나는 어떻게 이런 장점을 가지게 되었지? - 인생지도 (6) | 2024.09.21 |
---|---|
F-lab 자바 백엔드 6개월 수료 후기 (1) | 2023.10.15 |
쿼리 주석 생성기 - js, query (0) | 2023.02.22 |
NH 저축 IFRS 차세대 프로젝트를 진행하면서 개발서버 반영에 상당한 불편함을 겪었다.
같은 서버에 컨터이너만 다르게 두가지 프로젝트가 같이 진행되고 있었기에
FTP로 수정된 파일을 일일이 업로드 해서 반영을 해야하는상황
도저히 귀찮아서 결국 쉘 스크립트를 작성하기로했다. 짬나는 시간에 급하게 짠 감이 있어서 손 볼 부분이 꽤 있겠지만
추후에 스크립트 작성에 참고하고자 게시글을 작성한다. 참고) ksh 을 사용
* 본 포스팅에서는 기본적인 shell 문법이나 powershell 문법에 대해서는 따로 다루지 않음
<개발서버 shell>
# !/usr/bin/ksh
echo “Operating… Copy file…”
#복사할파일 위치 ( 업무구분 폴더가 분류되어서 존재하는 위치)
fileLocation=“/lmapp/lombas/deploy_sh_auto”
#붙여넣기 될 파일들의 각각위치 ( jsp, js, java, xlm …)
savePathJS=“/lmapp/lombas/webapp/biz/scripts”
savePathJSP=“/lmapp/lombas/webapp/biz/scripts”
savePathFrm=“/lmapp/lombas/frm”
savePathOnline=“/lmapp/dev-lombas/src/com/lombas”
savePathBatch=“/lmapp/dev-lombas/src/com/lombas/batch”
#파일위치에서 파일별loop
for entry in $fileLocation/*
do
filename=$entry
#구분 분리
cop=$(echo $entry | cut -d ‘/‘ -f2)
#디렉토리여부 체크
if [ -d $filename ];then
#업무구분 분리
bizCop=$(echo $entry | cut -d ‘/‘ -f5)
echo “####”$bizCop”####”
#파일여부 체크
if [ -f $fileLocation/$bizCop/* ];then
for name in $fileLocation/$bizCop/*
do
fileN=$(echo $name | cut -d ‘/‘ -f6)
echo “file name : “$fileN
fileEx=$(echo $name | cut -d ‘.’ -f2)
if [ -n $fileEx ];then
$movePath
if [ $fileEx == “js” ];then
movePath=$savePathJS/$bizCop/
elif [ $fileEx == “jsp” ];then
…
#업무 구분에 따른 붙여넣기 대상 PATH 입력
…
if [ -n $movePath ]; then
cp $name $movePath
rm $name
fi
unset movePath
fi
done
fi
fi
done
#빌드까지
echo $(ant -buildfile /lmapp/dev-lombas/build.xml)
#서버재기동
echo $(/lmapp/lombas/bin/restartcon2.sh)
초기에 윈도우에 있는 파일 중에 어떤것들을 수정 대상으로 잡을까 고민을 해보고 직접 사용도 해본 결과
최초에는 업무 구분을 입력받고 해당 폴더의 관련 파일들만 불러왔으나
xml 파일은 테이블 단위의 이름으로 되어있어 해당 파일을 불러오기 힘든 경우가 생겼다.
(시간이 더 여유가 있었다면 파일을 읽어와서 해당 파일에서 사용하는 테이블 명의 xml 파일을 가져오는 부분을 추가했으면 좋았을거 같다)
결국 더 편리하고 빠르게 사용 할 수 있는 방법이
수정된 날짜를 기준으로 배포 대상 폴더를 만들어주는것이라는 생각이 들었고 구현했다.
<윈도우 powershell>
$pastePath = “C:\projects\Shell\deployList\”
$inputDate = Read-Host “몇일전까지의 수정본을 사용 할것인지 입력 “
Write-Host $inputDate “일 전부터 수정된 항목들을 전부 읽어옵니다.”
$onlinePath = “C:\projects\nhsb_new\dev-lombas\src\com\lombas\”
$screenPath = “C:\projects\nhsb_new\runtime\webapp\biz\”
.
.
.
$todayMove = @((Dir $onlinePath -Recurse | Where-Object {($_.LastWriteTime -gt (Get-Date).AddADays(-$inputDate).date -and $_.Extension -ne “”)}).FullName)
$todayMove += (Dir $screenPath -Recurse | Where-Object {($_.LastWriteTime -gt (Get-Date).AddADays(-$inputDate).date -and $_.Extension -ne “”)}).FullName
.
.
.
RD $pastePath* -Recurse
foreach( $node in $todayMove)
{
if($node)
{
echo $node
$nodeSplit = $node.Split(“\”)
$bizCop = “”
if($nodeSplit[7] -eq “batch”)
{
$bizCop = $nodeSplit[9]
}
else
{
$bizCop = nodeSplit[7]
}
$bizCop += “\”
$copyPath = $pastePath + $bizCop
#폴더 없을 시 생성
if( -not (Test-Path $copyPath )){New-Item $copyPath -Type Directory | Out-Null}
Copy $node $copyPath
}
}
powershell 이 확실히 에러도 잘 잡아주고 편리하다는걸 느꼈다..
++후기
좋은 기회에 shell 관련 기본적인 script 작성을 해보니 쉘환경에서의 vi 에디터로 작성하는 쉘은 정말…
에러가 나도 잡기도 힘들고 띄어쓰기 하나하나에도 모든 심혈을 기울여야해서 상당히 까다로운 녀석임을 느꼈다..
추후에 이번 경험이 도움이 될것으로 예상된다.
'기록' 카테고리의 다른 글
나는 어떻게 이런 장점을 가지게 되었지? - 인생지도 (6) | 2024.09.21 |
---|---|
F-lab 자바 백엔드 6개월 수료 후기 (1) | 2023.10.15 |
쿼리 주석 생성기 - js, query (0) | 2023.02.22 |