3

AppEngine Java でのアプリの展開を自動化/スクリプト化したいと考えています。私が知る限り、再利用可能な優れたオープン ソリューションを思いついた人はいません...またはありますか?

理想的には、次のタスクを実行します。

  1. war フォルダーを一時ディレクトリーにコピーします。
  2. 実行する必要があるタスクを実行します (このステップでは JS コードを UGL 化します)。
  3. 「appcfg resource_limits_info war」を実行して、Google で認証し、Cookie を保存します。(このため: http://code.google.com/p/googleappengine/issues/detail?id=7653 )
  4. 現在の日時をバージョン (2012-01-01-1411) として使用して、「appcfg update」を呼び出して新しいバージョンをアップロードします。
  5. http://2012-01-01-1411.appid.appspot.com URLをクリックして、インスタンスをウォームアップします。
  6. #5 が成功した場合は、「appcfg set_default_version」を呼び出して新しいバージョンに切り替えます。そうでない場合は、そうなるまで #5 を繰り返します。
  7. 古いバージョンを自動的に削除して整理します。(不可能、機能のリクエスト: http://code.google.com/p/googleappengine/issues/detail?id=2723 )

私はこれを自分で書くことができます/書くつもりですが、他の誰かが以前にこの道を進んだことがあるかどうか、または多くの人が使用できるソリューションに協力したいかどうか疑問に思っています.

4

2 に答える 2

0

これは、私たちにとって非常にうまく機能している ant ターゲットの中核です。上記の手順で実装されていない唯一の部分は #7 です。これは、AppEngine ではまだ実現できないためです。日付をバージョン番号として使用すると、展開を追跡するのに非常に便利であることがわかりました。

<target name="auth">
    <java classname="com.google.appengine.tools.admin.AppCfg" inputstring="${appengine.pass}" fork="true">
        <sysproperty key="appengine.sdk.root" value="${appengine.sdk.dir}" />
        <classpath>
            <fileset dir="${appengine.sdk.dir}/lib" includes="**/*.jar" />
        </classpath>
        <arg value="--email=${appengine.email}" />
        <arg value="resource_limits_info" />
        <arg value="war" />
    </java>
</target>

<target name="optimize">
    <delete dir="${staging.dir}" />
    <mkdir dir="${staging.dir}" />

    <copy todir="${staging.dir}">
        <fileset dir="war">
            <exclude name="WEB-INF/classes/**" />
            <exclude name="WEB-INF/appengine-generated/**" />
            <exclude name="include.js" />
            <exclude name="js/app/**" />
            <exclude name="js/tmpl/**" />
        </fileset>
    </copy>
    <jar destfile="${staging.dir}/WEB-INF/lib/classes.jar" basedir="${classes.dir}" />

    <exec executable="./scripts/optimize.sh">
        <env key="PATH" value="/usr/bin:/bin:/usr/local/bin" />
    </exec>
</target>

<target name="deploy-prod" depends="auth, optimize">
    <property name="appid" value="voost0" />
    <tstamp>
        <format property="vnum" pattern="yyyy-MM-dd-HHmm"/>
    </tstamp>

    <echo message="Deploying to version: ${vnum}" />

    <appcfg action="update" war="${staging.dir}">
        <options>
            <arg value="--application=${appid}" />
            <arg value="--version=${vnum}" />
        </options>
    </appcfg>

    <get src="http://${vnum}.${appid}.appspot.com/ping" dest="${build.dir}/warmup-garbage" verbose="true" />
</target>

<target name="deploy-prod-switch" depends="deploy-prod">
    <appcfg action="set_default_version" war="${staging.dir}">
        <options>
            <arg value="--application=${appid}" />
            <arg value="--version=${vnum}" />
        </options>
    </appcfg>
</target>
于 2012-09-13T21:28:48.720 に答える
0

Gradle または Maven プラグインを使用できます

グラドル: https://github.com/GoogleCloudPlatform/gradle-appengine-plugin

Maven: https://cloud.google.com/appengine/docs/java/tools/maven

于 2017-01-12T20:07:11.103 に答える