本文隻涉及到雲效流水線的配置及部署,前提是linux伺服器已經裝好java環境。
雲效提供任務、日程、統計、流水線等功能,豐富多樣。由于文章篇幅有限,本文隻涉及到流水線功能。
準備項目
小白寫一個簡單的springboot項目,功能是列印請求IP,寫好後上傳到github遠端倉庫(也可以是Gitlab,自建Gitlab,碼雲,Codeup等外網可以通路的代碼托管平台)。這裡注意一定要有空URL的映射,因為啟動腳本要檢測項目是否啟動成功。或者可以自行修改啟動腳本
@RestController
@RequestMapping("/")
public class ShowIpController {
@GetMapping("/")
public String index(HttpServletRequest request){
String ip = getIp(request);
System.out.println("ip:[" + ip + "]");
return "thanks";
}
@GetMapping("/ip/show")
public String show(HttpServletRequest request){
String ip = getIp(request);
System.out.println("ip:[" + ip + "]");
return "thanks";
}
private static String getIp(HttpServletRequest request) {
if (request == null) {
return "unknown";
}
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
}
}
建立啟動腳本 deploy.sh 并放入resources目錄下,下文能用得到,有了啟動腳本我們就不需要手動去啟動建構的項目
#!/bin/bash
# 修改APP_NAME為雲效上的應用名
APP_NAME=ip
VERSION=1.0
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20 # 等待應用啟動的時間
APP_PORT=8080 # 應用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT} # 應用健康檢查URL
APP_HOME=/home/devops/${APP_NAME} # 從package.tgz中解壓出來的jar包放到這個目錄下
JAR_NAME=${APP_HOME}/${APP_NAME}-${VERSION}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log #應用的啟動日志
# 建立出相關目錄
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
echo "Usage: $PROG_NAME {start|stop|restart}"
exit 2
}
health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ "$?" != "0" ]; then
echo -n -e "\rapplication not started"
else
echo "code is $status_code"
if [ $status_code -eq 200 ];then
break
fi
fi
sleep 1
((exptime++))
echo -e "\rWait app to pass health check: $exptime..."
if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo "starting java process"
nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
echo "started java process"
}
stop_application() {
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ ! $checkjavapid ]];then
echo -e "\rno java process"
return
fi
echo "stop java process"
times=60
for e in $(seq 60)
do
sleep 1
COSTTIME=$(($times - $e ))
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ $checkjavapid ]];then
kill -9 $checkjavapid
echo -e "\r -- stopping java lasts `expr $COSTTIME` seconds."
else
echo -e "\rjava process has exited"
break;
fi
done
echo ""
}
start() {
start_application
health_check
}
stop() {
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac
開始配置
建立項目
登入
阿裡雲雲效。進到雲效管理背景後,點選建立項目,雲效提供産品研發,遊戲研發等多種企業模闆。此處我選擇了空白模闆,大家可以根據自己的需要選擇不同的模闆。輸入項目名ip,選擇ip項目分組,點選建立即可建立成功,操作十分簡單。

建立流水線
建立完成後就自動跳轉到了我們剛剛建立的ip項目,切到"流水線"TAB,點選建立流水線。選擇第一項
`
Java · 建構、部署到阿裡雲ECS/自有主機

##關聯遠端倉庫并設定代碼源
代碼源選擇你已經上傳的外網遠端倉庫,我關聯github,完成授權後依次選擇命名空間,倉庫,填入分支名"master"。

##編輯java建構上傳
單工程項目直接預設的就可以了,如果是有父子層級的項目就需要配置 ***建構物上傳-打包路徑***,有幾個需要釋出的工程就需要幾條打包路徑,需要注意的是開頭沒有/,結尾有/。例如app/target/
還可以選擇任務插件,将成功,失敗等狀态直接發送到你自定義的郵箱或者是釘釘群

##編輯主機部署
制品選擇我們剛剛建構時建立的制品,建立主機組,選擇 ***自有主機*** ,将頁面中的指令複制到你的遠端主機上運作一下,等待安裝成功即可。注意此指令15分鐘有效,超出後需要重新擷取。

這樣我們的清單中就出現了一台機器,這台機器已經與這條流水線關聯了。代碼會自動部署到這台機器上。主機組就選擇剛剛建立的主機,你想把建構好的jar包放在哪,下載下傳路徑就填入你想放的路徑,這裡我填入*/home/devops/ip/ip.tgz*。部署腳本填入解壓縮指令及運作 *啟動腳本*
*tar zxvf /home/devops/ip/ip.tgz -C /home/devops/ip/
sh /home/devops/ip/classes/deploy.sh start*
[關于部署腳本例子的詳細解釋](https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a416546fd9001aee81b9)
至此點選右上角儲存并運作,然後靜靜的等待項目運作即可。

##運作成功後效果

----
【雲效官網】https://www.aliyun.com/product/yunxiao?channel=zhibo