我有一个计算引擎实例,它的启动脚本包括以下几行。
# 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运行新代码?
答案 0 :(得分:4)
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
然后,您可以随时手动重新运行此脚本,以在实例运行时更新您的仓库。如果您希望实例自动更新其自己的代码,请从cron
调用此脚本。您可以通过man cron
和man crontab
了解如何设置定期命令运行。
答案 1 :(得分:0)
要直接回答您的问题,在大多数发行版中,GCE会将您的启动脚本放在以下位置:/ usr / share / google / run-startup-scripts。您无需重新启动实例并停机。重新运行它。
链接在这里: https://cloud.google.com/compute/docs/startupscript?hl=en#rerunthescript
只是一些建议。我会利用自动化工具进行任何类型的git pulls或代码部署。詹金斯或特拉维斯可以做到这一点。我也鼓励你看一下CM工具。 Ansible是用户友好的,如果你刚刚开始使用CM,那么它是一个很好的学习者。
祝你好运!