【发布时间】:2023-03-30 00:46:01
【问题描述】:
最后我编写了一个 bash 脚本来构建一个 docker 容器(一个 NODE JS 应用程序),以便应用程序在 DEV 服务器上运行。问题是 bash 脚本必须在多个服务器上分阶段运行,即,我们需要在本地构建 docker 容器,ssh 到跳转盒并在那里 rsync ,然后将它从跳转盒 rsync 到开发服务器和然后再次 ssh 到它(如果这个过程是手动完成的)。
如果您查看下面 BASH 脚本中的第 5 步,则 rsync 已完成,脚本运行到 SSH 到 jumpbox 服务器,但是,脚本停在那里,我刚刚登录到 jumpbox。
谁能告诉我这个 bash 脚本有什么问题以及我应该如何解决它?
提前谢谢你。
最好, 回复
#!/bin/bash
#This script allows users to deploy the application with minimal work
echo -n "Shall we begin the deployment process? Are you ready to rule the world with QA Hero's next version? `\n` If you are, then type YES and press [ENTER]?: "
read begin
echo "Wohoooo! You did the right thing! We are now ready to roll and you can actually see your terminal scroll! Lol, what a troll!"
echo -n "Yo mate! Can you enter your enumber and press [ENTER]?: "
read enumber
docker build --build-arg NODE_ENV=staging -t course-hero-x -f Dockerfile .
echo "The file has been built! Step 1 completed"
termdown 3
echo "BOOM! Get ready for step 2."
docker save -o course-hero.tar course-hero-x
termdown 3
echo "BOOM! Get ready for step 3."
rsync -avzh --progress --stats course-hero.tar `echo ${enumber}`@10.188.129.25:/home/`echo ${enumber}`
termdown 3
echo "BOOM! Get ready for step 4."
ssh `echo ${enumber}`@10.188.129.25
termdown 3
echo "BOOM! Get ready for step 5."
ls -la
termdown 3
echo "BOOM! Get ready for step 6."
if ["$enumber" == "e30157" || "$enumber" == "E30167"]; then
rsync -avzh --progress --stats course-hero.tar `echo ${enumber^^}`@10.80.63.65:/home/eh7/`echo ${enumber^^}`
elif ["$enumber" == "e32398" || "$enumber" == "E32398"]; then
rsync -avzh --progress --stats course-hero.tar `echo ${enumber^^}`@10.80.63.65:/home/eh8/`echo ${enumber^^}`
else
echo "You cannot access this system."
fi
termdown 3
echo "BOOM! Get ready for step 7."
ssh `echo ${enumber^^}`@10.80.63.65
echo "BOOM! Get ready for step 8."
ls -la
echo "BOOM! Get ready for step 9."
sudo docker load -i course-hero.tar
termdown 3
echo "BOOM! Get ready for step 10."
sudo docker ps
termdown 3
echo "BOOM! Get ready for step 11."
sudo docker stop $(sudo docker ps -a -q)
termdown 3
echo "BOOM! Get ready for step 12."
sudo docker rm $(sudo docker ps -a -q)
termdown 3
echo "BOOM! Get ready for step 13."
sudo docker load -i course-hero.tar
termdown 3
echo "BOOM! Get ready for step 14."
sudo docker run -d -e TZ=Australia/Melbourne --net=courseHero -p 0.0.0.0:80:3000 course-hero-x
echo "QA Hero is up and running. Go to http://cohero-dev.rmit.edu.au to checkout the latest version!"
termdown 3
echo "Step 15 completed! We are done here! See you next time homey!"
【问题讨论】:
-
请提供minimal, complete, verifiable example 或尽可能接近。
-
我看不懂问题描述。运行
ls -la时,脚本会做一些奇怪的事情吗?termdown是什么? -
您可能会考虑一些更高级别的工具,而不是完全手动构建它。如果你运行一个你的隔离服务器可以访问的 Docker 注册表,你可以
docker push给它,而不是手动复制镜像;任何流行的配置管理工具(Chef、Salt Stack、Ansible)都可以为您管理运行命令甚至更新远程主机上的 Docker 容器的任务。