【问题标题】:Is there a solution for automated / scripted Google AppEngine Java deployment?是否有自动化/脚本化 Google AppEngine Java 部署的解决方案?
【发布时间】:2012-07-14 07:49:12
【问题描述】:

我想在 AppEngine Java 上自动/脚本部署我的应用。据我所知,没有人想出一个很好的可重复使用的开放解决方案......还是有吗?

理想情况下,它会执行以下任务:

  1. 将 war 文件夹复制到一个临时目录。
  2. 运行任何需要运行的任务(我们在这一步中对我们的 JS 代码进行 Uglify)。
  3. 运行“appcfg resource_limits_info war”以通过 google 进行身份验证并存储 cookie。 (因此:http://code.google.com/p/googleappengine/issues/detail?id=7653
  4. 调用“appcfg update”以上传新版本,使用当前日期时间作为版本 (2012-01-01-1411)。
  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

我可以/将自己写这篇文章,但我想知道是否有其他人曾经走这条路,或者愿意合作开发一个很多人都可以使用的解决方案。

【问题讨论】:

  • 这似乎是一个非常定制的解决方案;你检查过 Ant 或 Maven 吗?
  • 您想建议一个不那么定制的解决方案来解决这个问题吗? Ant 和 Maven 是工具,而不是解决方案。
  • 我不需要知道使用什么工具,我需要知道是否有人对问题有好的解决方案。工具无关紧要。
  • 你应该自己写这个并将它作为答案发布,我肯定会支持它。祝你好运!
  • 是的。作为 Ant 构建的一部分,我们现在已经实现了上述大部分步骤,并且运行良好。我会尽快在这里记录下来。

标签: google-app-engine


【解决方案1】:

这是对我们非常有效的 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>

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多