2012-04-20 21 views
5

Estoy tratando de automatizar la implementación de código desde un repositorio privado de Github usando Phing pero teniendo problemas para encontrar algo que funcione como una exportación SVN.Phing y github

He leído algunas publicaciones en git archive y git checkout-index pero he tenido problemas para conseguir que funcionen con github. Me da la impresión de que están interesados ​​en que usemos la descarga zip, ya que pueden almacenar en caché esto, etc.

No me importaría descargar el archivo zip de github si hubiera una tarea simple en Phing para hacer esto, un simple La tarea http no funcionó ya que está sobre https y supongo que primero se necesita algún tipo de autenticación.

Logré usar la tarea gitclone en Phing pero la carpeta oculta ".git" también está clonada, lo que está causando dolores de cabeza masivos ... principalmente porque en compilaciones posteriores no puedo eliminar la carpeta de compilación ya que sugiere ciertos archivos .git , es decir, * .idx o * .pack están en uso.

¿Alguien ha tenido suerte con phing y un repositorio privado de github?

Gracias

+0

es que un repositorio privado? si no, ¿no debería el enlace zip dl estar a disposición del público, por lo que no se requiere autenticación? – CharlesB

+3

Quizás sería más fácil si configuras un repositorio que es un clon de github y dejas clonar a phing (o archivo de git, git checkout-index) desde ese localmente. – ralphtheninja

+0

Es un repositorio privado, el enlace de descarga devuelve un 404 cuando no está conectado. – Carlton

Respuesta

4

@AYK Mi mal, recientemente han estado explorando opciones de implementación y creo que va a rodar con Capistrano ...

De todas formas esto fue mi escritura de la estructura Terminé usando temporalmente con el asesoramiento de la gente ...

  • Asumamos mis vidas de aplicaciones en "C: \ app"
  • Asumamos este archivo build.xml vive en "C: \ app"
  • Supongamos que mi aplicación también contiene un git repo "C: \ app.git"
  • Eliminar cualquier compilación & desplegar los directorios "C: \ app \ build" y "C: \ app \ deploy" que puedan existir de una compilación anterior
  • Hacer directorios "C: \ app \ build" y "C: \ app \ desplegar", llevará a cabo el git checkout y código final para desplegar
  • excuting el git checkout como comprobaciones recomendadas fuera código de Git y pone en "C: \ app \ build"
  • Hay ciertos directorios como documentos que no quiero salir así que copio los archivos que desea implementar en "C: \ app \ desplegar"

  • El problema que tuve con Phing es la parte de scp, necesitaba ssh2 dll en PHP, que no tenía ni quería perder tiempo tratando de compilar la fuente.

  • Así que, en todo lo que logró lo que yo quería con Phing pero después de pasar una noche con Capistrano estoy convertida

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>