将git repo部署到“生产”服务器

时间:2014-02-24 07:38:44

标签: linux git github sftp

我有一个git repo,其中一组开发人员和我正在合作开发项目代码。偶尔,我们想将git repo复制到具有外部IP地址(w.x.y.z)的VPS(设置为Linux服务器)。

我可以进入SFTP客户端并将文件夹层次结构向上导航到服务器根目录,然后向下导航到/ var / www /(服务器Web根目录)以删除我的文件但我想部署到服务器而是通过命令行。

我的目标是将Linux服务器配置为远程git目录,但不知道如何导航文件层次结构让git识别远程分支repo需要进入/ var / www /。 / p>

简短搜索已发现git remote add origin username@w.x.y.z,然后使用git push origin

似乎以这种方式连接到w.x.y.z会将我放在'用户名'的主文件夹中,而不是通过浏览器访问时的根网站目录(/ var / www /)。

有没有人能够深入了解如何设置远程目录以将git repo部署到“生产”服务器?

2 个答案:

答案 0 :(得分:1)

你似乎是以一种相当不明显的方式做这件事。我想你想要做的是将git repo复制到其他地方(vps服务器)。实现此目标的标准方法是git clone

/var/www/目录或其相应的子目录中,执行:

git clone [URL-FROM-GITHUB]

这会将git存储库克隆到您的VPS。然后,您可以使用

更新它
git pull

可以用

编写脚本
ssh my.vps.server 'cd /var/www/whatever && git pull'

但是,通常你不希望整个项目都放在'/ var / www / ...'中,因为这也会把你不想在那里部署的东西放在那里,例如: .git目录。因此,最好在您的主目录中克隆repo,并使用rsync删除您不想要的文件,在/var/www/针对您的存储库的--exclude目录下创建一个小脚本,或只是rsync - 回购的子目录。

答案 1 :(得分:0)

可以肯定的是,这是发布此内容的正确位置。我正在Jenkins POC上班。目标是要做两件事:

  1. 创建/ opt / sysops目录并由jenkins用户拥有
  2. 将脚本从git repo部署到/ opt / sysops

我发现,如果我使用正确的权限提前创建目录,一切都会很好。如果不这样做,我会得到我认为是预期的错误:

Building in workspace /var/lib/jenkins/workspace/Git POC
java.nio.file.AccessDeniedException: /opt/sysops
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
    at java.nio.file.Files.createDirectory(Files.java:674)
    at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
    at java.nio.file.Files.createDirectories(Files.java:767)
    at hudson.FilePath.mkdirs(FilePath.java:3272)
    at hudson.FilePath.access$1300(FilePath.java:212)
    at hudson.FilePath$Mkdirs.invoke(FilePath.java:1253)
    at hudson.FilePath$Mkdirs.invoke(FilePath.java:1249)
    at hudson.FilePath.act(FilePath.java:1077)
    at hudson.FilePath.act(FilePath.java:1060)
    at hudson.FilePath.mkdirs(FilePath.java:1245)
    at hudson.plugins.git.GitSCM.createClient(GitSCM.java:810)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1180)
    at hudson.scm.SCM.checkout(SCM.java:504)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1208)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
    at hudson.model.Run.execute(Run.java:1819)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

我知道我可以使用ansible来强制文件夹的创建和所有权,但是不确定是否应该走这条路,或者是否有办法使它成为jenkins中POC项目的一部分(这显然意味着要提供jenkins用户的sudo特权即可运行mkdir)。任何想法或反馈将不胜感激。