1. 背景
大家在生活中經(jīng)常會(huì)自己寫一點(diǎn)小代碼。然后部署在公有云的服務(wù)器上。但是一般像阿里,騰訊等服務(wù)商,提供的機(jī)器內(nèi)存并不是很大。如果想裝入一個(gè)jenkins之類的服務(wù),會(huì)比較占用CPU和內(nèi)存的資源。但是人手的部署又是比較麻煩的。所以我這里提供了一個(gè)思路,使用shell腳本來簡(jiǎn)單實(shí)現(xiàn)自動(dòng)化構(gòu)建。
2.基本原理
這個(gè)很簡(jiǎn)單的,我以比較常規(guī)的 vue.js + spring的方式來介紹一下。我們需要在服務(wù)器上安裝git和配置好ssh key,這個(gè)不做過多介紹。具體的流程圖如下。
?3. 具體實(shí)現(xiàn)
這里我將它拆分為以下幾個(gè)步驟。
3.1 拉取代碼 && 將后臺(tái)代碼打包成jar
# 拉代碼 打包后臺(tái)jar start
cd /usr/local/cicd/blog-backend/
git pull origin master
cd /usr/local/cicd/blog-client/
git pull origin master &
echo "-----pull code completed------"
# page jar
cd /usr/local/cicd/blog-backend/
mvn clean compile
mvn clean package
echo "-----mvn package completed------"
rm -rf /usr/local/cicd/blog-api-0.0.1-SNAPSHOT.jar
cp /usr/local/cicd/blog-backend/target/blog-api-0.0.1-SNAPSHOT.jar /usr/local/cicd
echo "-----copy file success------"
#拉代碼 打包后臺(tái)jar end
3.2 移除舊的container及image運(yùn)行最新代碼打包成的container
這里使用了一點(diǎn)bash腳本的變量,通過shell命令拿到舊的containerId,并將其移除掉。
刪除image相對(duì)復(fù)雜一點(diǎn),通過grep命令拿到指定的image的id, 再移除掉。具體的可以參考下方的link.
最后是啟動(dòng)新的container,通過dockerfile將jar打包進(jìn)container,再docker run即可。這里貼上我的簡(jiǎn)單的Dockerfile.可以看到我的shell腳本以及jar,Dockerfile在同一目錄下,所以COPY *.jar就能輕易找到對(duì)應(yīng)的文件。
FROM openjdk:8-jdk-alpine
COPY *.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# docker 運(yùn)行 jar start
cd /usr/local/cicd
container_id=$(sudo docker ps -aqf "name=blob")
docker stop $container_id
docker rm $container_id
echo "----rm old container success------"
echo "----container id: { $container_id }----"
#https://www.cnblogs.com/sjptech/p/10865490.html
# 通過repository name 過濾并刪除 image
docker images | grep -E "blob" | awk '{print $3}' | uniq | xargs -I {} docker rmi --force {}
echo "----rm old image success------"
docker build -t blob:v1 .
echo "-----build success------"
docker run -d -p 8888:8888 --name blob blob:v1
echo "-----docker run success------"
# docker 運(yùn)行 jar end
3.3. 打包前端代碼
這似乎是最簡(jiǎn)單的部分了,僅需在服務(wù)器端提前安裝好node,執(zhí)行命令打包即可。最后將build好的文件放置回nginx的目錄即可。
# copy 前端資源到nginx 的html目錄 start
cd /usr/local/cicd/blog-client
npm install
npm run build
echo "-----npm over------"
rm -rf /usr/share/nginx/html/*
cp -r ./dist/* /usr/share/nginx/html
echo "----nginx file copy over------"
# copy 前端資源到nginx 的html目錄 end
echo "全部結(jié)束啊啊啊"
4. 效果展示及附件
4.1 效果展示
?
?4.2 完整文件下載
見此link,?Download
?5. 其他優(yōu)化
相信比較懶的小伙伴看出來了,這樣做似乎也不夠自動(dòng)化。還需要鏈接到服務(wù)器去執(zhí)行腳本,能不能更加自動(dòng)化呢。這個(gè)確實(shí)可以,參考jenkins的實(shí)現(xiàn)方式,可以使用github等平臺(tái)的webhook,只要簡(jiǎn)單的配置好url. 當(dāng)有push操作時(shí),github會(huì)觸發(fā)一個(gè)call到配置好的url上。這樣當(dāng)接收到請(qǐng)求之后,只要簡(jiǎn)單觸發(fā)上面的腳本執(zhí)行即可。文章來源:http://www.zghlxwxcb.cn/news/detail-415265.html
由于篇幅有限,將在下篇文章中介紹具體的實(shí)現(xiàn)。碼字不易,希望大家能點(diǎn)個(gè)贊哈。文章來源地址http://www.zghlxwxcb.cn/news/detail-415265.html
到了這里,關(guān)于簡(jiǎn)單的Shell腳本實(shí)現(xiàn)自動(dòng)化構(gòu)建部署-適合前后端分離的小網(wǎng)站的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!