我正在使用Mercurial和Fabric来部署我的网站。我之前从未使用过Fabric,因此我在网上复制了一个示例fab文件,然后更改了vars以匹配我自己的网站。
以下是代码行:
def prod():
env.hosts = ['kevinburke.webfactional.com']
env.user = 'kevinburke'
def deploy():
require('hosts' , provided_by=[prod])
local ("hg tag --local --force production")
local ("hg push --remotecmd /home/kburke/bin/hg") # this works fine
run ("cd /my/web/directory; hg update -C production")
,这是从命令行调用的
fab prod deploy
当我是唯一部署网站的人时,这没有任何问题。但最近我添加了两个运行相同fabfile的提交者,当他们尝试部署该站点时,该站点的远程版本不会更新到最新版本 - 它只更新到我的最新版本标记为生产,而不是标记的生产。
我希望它会使用他们的“生产”标签来更新文件。为什么会这样?如何让程序按照我期望的方式运行?
谢谢,凯文
答案 0 :(得分:2)
您无法发布本地标记。这意味着您的第一步已经在/my/web/directory
回购中执行,或者已经有production
名为修订版(您可以查看hg tags
,hg branches
和hg bookmarks
)。
您可以通过多种方式修复工作流程(按优先顺序排列):
production-23
或production-42
,您可以在生产框中进行解析。production
分支,其中每个要传递的修订都合并到此分支中。如果你已经有分支机构的经验,我推荐这个。production
书签以跟踪已部署的版本。这看起来像您目前想要建立的解决方案。如果要使用书签,则需要在服务器和所有客户端上启用它们,并使用hg push -B production
将书签的当前状态推送到服务器。这个过程的一个缺点是你永远不会看到是否有人将其他书签推送到服务器,因为书签的传输会无声地重写服务器上的书签。答案 1 :(得分:1)
可能是基本的,但是你看到它确实做了什么吗?可能没有发生任何事情,当你运行它时,部署的是你的“生产”标签。
由于hg tag --local
表示该标记仅适用于您的本地仓库并且未进行版本控制,因此我无法想到任何其他原因。其他人甚至无法知道标签。