쉘 스크립트가 자동으로 젠킨스를 배포하는 방법

참고 :이 스크립트 때문에 다른 상황으로, 쉘 스크립트를 공유하는 데 사용됩니다, 그것은 직접 배포와 다른 환경에서 사용할 수 없습니다.

#! / 빈 / bash는
# 시간 : 2019년 7월 29일
# 저자 : 쇼 힐
# 마이크로 편지 : helpxiaoshan
#이 용도 : XXXX UAT 환경 ATG 쇼핑몰 프로젝트 젠킨스 자동 배포를 사용하십시오.

############주의 : ################################## ###############################################

1 주 : 대상 호스트의 / etc / SSH / sshd_config에, MaxSessions 50 (권장 값) 개정의 필요성을 SSHD 서비스 구성을 다시로드합니다.

2 주 : 스크립트가 예를 들어, 매개 변수, 프로젝트 이름에 대한 매개 변수를 따라야합니다 : 쉬 deploy.sh 저장소

300 개 이상의 초 시작 시간 톰캣 항목이 값이 증가 할 때 광고 3:50이 15 초 백그라운드 프로세스 20 × 15초의 = 용 300S 300 초 총 검출 시간 잠 있습니다.

################################################## ################################################## ########

= startTime을의 date +'%Y-%m-%d %H:%M:%S'
프로젝트 이름 = $ 1 # 첫 번째 매개 변수는 프로젝트 이름입니다

[$ 1] || 에코 "ERROR : 아니! 프로젝트 이름"#의 판사 $ 1 비어 후 아직 스크립트를 종료!
[$ 1] || 1 번 출구

[$의 프로젝트 이름 = "저장소"] 경우에, 그때
. #第一步,停掉目标项目进程
IP = 192.168.220.34
에코 "INFO PROJECT_NAME 스토어 인"
에코 -e "\ n"
에코 "INFO는 : 저장을 중지 Begain. .. "
-l 오라클 $의 IP -n ssh를"pgrep을 -f -l 저장 | 그렙 -v '꼬리 -f'| 그렙 -v 그렙 | ''-d 잘라 -f1 | xargs를 죽일 -9 ">> / dev에 / 널 2> & 1 개
합계 = $?
#echo의 $ 합계
[$ 합계 -eq 0] & & 에코 "정보 : 저장소가 사망한다"
[$ 합계 -ne 0] & & 에코 "정보 : 저장소가 시작되지 않았습니다"

#第二步,删除旧代码并清除缓存。
echo -e "\n"
echo "INFO: Begain delete old file and cache..."
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/stage/prod_lockserver.ear/prod_lockserver.ear"
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/tmp"
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/cache"
echo "INFO: already delete old file and cache"

#第三步,拷贝最新代码到项目路径下。
echo -e "\n"
echo "INFO: Begain copy code to project host..."
scp -qrp /file/uat_ears/prod_lockserver.ear oracle@$ip:/home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/stage/prod_lockserver.ear
[ $stat -eq 0 ] && echo "INFO: copy Success"
[ $stat -ne 0 ] && echo "ERROR: copy failed!!!" && exit 1

#第四步,启动项目进程
echo -e "\n"
echo "INFO: Begain start store Weblogic"
ssh -n -l oracle $ip "nohup /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/bin/startManagedWebLogic.sh prod_lockserver http://192.168.220.35:7001 -Djava.rmi.server.hostname=192.168.220.34 -Dguangda.merchant.parameter.file.path=/file/cebbank/ceb_merchant.properties -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8466,server=y,suspend=n -Djava.compiler=NONE -Datg.dynamo.server.name=prod_lockserver -Xms6G -Xmx6G -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:InitiatingHeapOccupancyPercent=45 -XX:ConcGCThreads=4 -XX:G1ReservePercent=15 -XX:+DisableExplicitGC -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/oracle/store_gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/oracle/store_heap.bin -Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=192.168.220.34 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder -Datg.dynamo.data-dir=/home/oracle/ATG-Data/ > /home/oracle/output/logs/prod_lockserver.log &"
echo "INFO: Weblogic starting..."

#第五步,启动精确检测weblogic启动完毕的后台进程
echo -e "\n"
>${project_name}_${ip}_status.log  #清空检测Weblogic是否启动的日志文件内容
for i in `seq 20`    #启动10个检测Weblogic启动日志后台进程,当后台进程被杀掉后,日志才会被写入log文件
do
    ssh -n -l oracle $ip "tail -fn 0 /home/oracle/output/logs/prod_lockserver.log" | grep "The server started in RUNNING mode" >>${project_name}_${ip}_status.log &
done

#检测Weblogic启动状态的变量stats1,检测机制为检测目标服务器上的项目日志文件,是否新打印出"The server started in RUNNING mode";
t=0
stats1=0
while [ $stats1 -eq 0 ]
do
    sleep 15   # 10个后台进程,20x15=300s,检测时间共300秒,当有项目的tomcat启动时间超过100秒,则增大该数值。
    let t+=15  #t=`expr $t + 10`
    echo "检测 $project_name Weblogic 是否启动完毕,已用时 $t 秒..."
    echo -e "\n"
    ssh -n -l oracle $ip "pgrep -f 'tail -fn' | head -n 1 | xargs kill -9"  # kill掉一个后台进程
    [ $? -eq 0 ] && echo "INFO: 成功杀掉 tail -fn 后台进程。"
    stats1=`cat ${project_name}_${ip}_status.log | wc -l `   # 每kill一个后台进程,状态文件就更新一次
    #[ $stats1 -eq 0 ] && echo "INFO:未检测到 started in RUNNING mode 关键词。"
    #[ $stats1 -ge 1 ] && echo "INFO:成功检测到 started in RUNNING mode 关键词。"
done

ssh -n -l oracle $ip "pgrep -f 'tail -fn' | xargs kill -9" # kill掉剩余无用后台进程。
echo -e "\n"
echo "INFO:检测到启动关键词:"
head -n 1 ${project_name}_${ip}_status.log  #  输出抓取的 started in RUNNING mode 日志。
echo -e "\n"
echo "打印最后864行日志"
ssh -n -l oracle $ip "tail -n 864 /home/oracle/output/logs/prod_lockserver.log"

있다

# 스크립트 총 시간을 계산
ENDTIME = date +'%Y-%m-%d %H:%M:%S'
start_seconds = $ (DATE --date = "$ startTime을"+ %의 S)
end_seconds = $ (DATE --date = "$ endtime에"+ %의 S)
이 업데이트 에코 " "$ ((end_seconds-start_seconds ))"의 "

추천

출처blog.51cto.com/helpxiaoshan/2424619