我有一个计算引擎实例,它的启动脚本包括以下几行:
# Get the application source code from the Google Cloud Repository.
# git requires $HOME and it's not set during the startup script.
export HOME=/root
git config --global credential.helper gcloud.sh
git clone https://source.developers.google.com/p/$PROJECTID /opt/app
这段代码告诉VM从云存储库获取源代码,我的应用程序代码。每当我修改源代码并将更改推送到存储库并重新启动vm时,vm都不会执行新代码。我如何使vm运行新代码而不删除实例并创建新实例?
GCE VM启动脚本在每次引导时运行,而不仅仅是第一次引导,所以你应该只在第一次克隆repo,然后每隔一次更新,例如
# Note: this script is untested but should work.
export HOME=/root
git config --global credential.helper gcloud.sh
declare -r LOCAL_GIT_REPO="/opt/app"
if ! [[ -e "${LOCAL_GIT_REPO}" ]]; then
git clone https://source.developers.google.com/p/$PROJECTID "${LOCAL_GIT_REPO}"
else
cd "${LOCAL_GIT_REPO}"
git pull
fi
然后,你可以在任何时候手动重新运行这个脚本来更新你的实例正在运行的repo。如果您想让实例自动更新自己的代码,请从cron
调用该脚本。您可以学习如何通过man cron
和man crontab
设置周期性命令运行。
直接回答你的问题,在大多数发行版中,GCE把你的启动脚本放在这个位置:/usr/share/google/run-startup-scripts。您不需要重新启动实例,也不需要停机。重新运行一下。
链接在这里:https://cloud.google.com/compute/docs/startupscript?hl=en rerunthescript
只是一些建议。我会利用自动化工具进行任何形式的git提取或代码部署。詹金斯或特拉维斯都能做到。我也鼓励您看看配置管理工具。Ansible是用户友好的,如果你刚开始使用CM,这是一个很好的学习工具。
祝你好运!