Phing和github

5

我正在尝试使用Phing自动部署来自私有Github仓库的代码,但是我很难找到类似于SVN导出的功能。

我已经阅读了一些关于git archive和git checkout-index的文章,但在使用github时遇到了困难。我认为他们希望我们使用zip下载,因为它们可以缓存这个文件。

如果Phing中有一个简单的任务可以处理这个zip文件,我不介意从Github上下载它,但是简单的http任务无法工作,因为它是通过https进行传输,我想需要某种身份验证。

我成功使用了Phing中的gitclone任务,但是".git"隐藏文件夹也被克隆了,这引起了很多麻烦……主要是因为在后续的构建中,我无法删除构建文件夹,因为某些git文件,即*.idx或*.pack文件正在使用中。

是否有人在Phing和私有Github仓库方面有过成功的经验?

谢谢


这是一个私有仓库吗?如果不是,那么zip下载链接应该是公开的,因此不需要进行身份验证,对吧? - CharlesB
3
或许更容易的方法是设置一个克隆自Github的仓库,然后让Phing在本地从那个仓库克隆(或使用git archive、git checkout-index)? - ralphtheninja
这是一个私有库,未登录时下载链接会返回404错误。 - Carlton
那么@magnus的评论是正确的方式。 - CharlesB
Magnus,你的方法确实帮助我重新思考了我想要实现的目标,并帮助我得到了我需要的东西。最终,我在开发代码所在的目录(与“.git”文件夹相同的文件夹)中运行了这个Phing任务:<exec command="git checkout-index --prefix ${build.dir} -a"></exec> - Carlton
1
@Carlton - 为了社区的利益,你为什么不发布自己的答案并接受它呢? - AYK
1个回答

4

@AYK 抱歉,我最近一直在探索部署选项,想使用 Capistrano…

不管怎样,这是我根据他人建议暂时使用的构建脚本…

  • 假设我的应用程序位于 "C:\app"
  • 假设此 build.xml 文件位于 "C:\app"
  • 假设我的应用程序还包含一个 git 存储库 "C:\app.git"
  • 删除任何可能存在的上次构建的生成和部署目录 "C:\app\build" 和 "C:\app\deploy"
  • 创建目录 "C:\app\build" 和 "C:\app\deploy",将保存 git 检出和最终要部署的代码
  • 执行建议的 git 检出,检出代码并将其放入 "C:\app\build" 中
  • 我不想复制某些目录(如文档),所以我会将我想要部署的文件复制到 "C:\app\deploy" 中

  • 我在使用 Phing 时遇到的问题是 scp 部分,需要 PHP 中的 ssh2 dll,但我没有也不想花时间编译源代码。

  • 总之,我实现了我最初想要使用 Phing 实现的功能,但在与 Capistrano 研究一晚后,我已经改变了想法

== build.xml ==

<?xml version="1.0" encoding="UTF-8"?>

<project description="" name="MyProject" default="build" basedir=".">

    <property file="build.properties" />
    <tstamp>
    <format property="build.time" pattern="%Y%m%d_%H%I" />
    </tstamp>

    <!-- ============================================  -->
    <!-- Target: prepare                                 -->
    <!-- ============================================  -->
    <target name="prepare">
    <echo msg="Deleting old build and deploy dirs" />
    <delete dir="./build/" includeemptydirs="true" failonerror="true" />
    <delete dir="./deploy/" includeemptydirs="true" failonerror="true" />
    </target>

    <!-- ============================================  -->
    <!-- Target: create                                -->
    <!-- ============================================  -->
    <target name="create" depends="prepare">
    <echo msg="Creating fresh build and deploy directories" />
    <mkdir dir="./build/" />
    <mkdir dir="./deploy/" />
    </target>

    <!-- ============================================  -->
    <!-- Target: gitclone                              -->
    <!-- ============================================  -->
    <target name="gitcheckout" depends="create">
    <echo msg="Checking out latest code" />
    <exec command="git checkout-index --prefix ./build/ -a"></exec>
    </target>

    <!-- ============================================  -->
    <!-- Target: preparedeploy                         -->
    <!-- ============================================  -->
    <target name="preparedeploy" depends="gitcheckout">
    <echo msg="Preparing deploy" />
    <copy todir="./deploy/" >
        <fileset dir=".">
        <include name="cgi-bin/**" />
        <include name="htdocs/**" />
        </fileset>
    </copy>
    <mkdir dir="./deploy/logs" />
    </target>

    <!-- ============================================  -->
    <!-- Target: cleanup                                 -->
    <!-- ============================================  -->
    <target name="cleanup" depends="preparedeploy">
    <echo msg="Deleting build dir" />
    <delete dir="./build/" includeemptydirs="true" failonerror="true" />
    </target>

    <!-- ============================================  -->
    <!-- Target: build                                 -->
    <!-- ============================================  -->
    <target name="build" depends="cleanup, preparedeploy, gitcheckout, create, prepare">
    <echo msg="Starting build ${build.time}" />
    </target>

</project>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接