【问题标题】:Configure Jenkins to deploy PHP project that passed PHPUNit配置Jenkins部署通过PHPUNit的PHP项目
【发布时间】:2017-02-24 16:29:11
【问题描述】:

我有托管在 GitHub 上的 PHP 项目。 现在,我想配置 Jenkins 来运行单元测试,以便:

  • 每当开发人员将代码推送/提交到特定分支时,都会触发相应的 PHPUnit 构建作业。
  • 如果提交通过了单元测试,则部署源代码(假设我已经有了部署所需的脚本)。

问题是如何在源代码通过单元测试(即PHPUnit测试成功)时触发部署脚本?

请向我建议这样做的方法,我应该尝试使用哪个插件来实现结果? 谢谢!

【问题讨论】:

    标签: jenkins phpunit jenkins-plugins jenkins-pipeline


    【解决方案1】:

    这将是一篇很长的帖子,因为涉及的内容很多,但它很管用:

    你需要:

    • 蚂蚁
    • Git Publisher 插件
    • Antphpunit 需要在您的 PATH 中

    第 1 步:配置您的项目

    在您的 Jenkins 中,将您的项目配置为 Git 选项下的“轮询 SCM”。将“计划”留空。在“要构建的分支”下,将其设置为您要从中构建发布包的分支。 参考:

    第 2 步:为每个构建运行 ant

    向“调用 Ant”添加构建步骤

    如果您还没有使用 Ant,请在项目根目录中创建一个 build.xml 文件,将其添加到 Git 并具有以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <project default="full-build">
    <property name="phpunit" value="phpunit"/>
    
    <target name="full-build"
          depends="phpunit-unittests,-check-failure"
          description="runs the tests"/>
    
    <target name="phpunit-unittests"
          unless="phpunit-unittests.done"
          description="Run unit tests with PHPUnit">
        <exec executable="cmd" failonerror="true" resultproperty="result.phpunit" taskname="phpunit-unittests">
        <arg value="/c"/>
        <arg value="${phpunit}"/>
        <arg value="--configuration"/>
       <arg path="${basedir}/phpunit.xml"/>
         <arg value="--testsuite=Unit"/>
      </exec>
    
      <property name="phpunit-unittests.done" value="true"/>
    </target>
    
    <target name="-check-failure">
        <fail message="PHPUnit did not finish successfully">
        <condition>
        <not>
          <equals arg1="${result.phpunit}" arg2="0"/>
        </not>
        </condition>
        </fail>
    </target>
    </project>
    

    这将在调用 Ant 任务时运行所有单元测试,现在为每次构建项目时设置。

    然后,安装 Git Publisher 工具。配置如下:

    这会在成功构建时创建一个新的发布标签。稍后您将使用它来将版本发布到最终位置。 注意: Git Publisher 提供了不同的变量供使用,提交哈希,用户等,所以使用你想要的。我坚持使用 v1.1.BUILD 的增量标签,因为它更标准一些。

    最后,您需要添加一个 Git 挂钩,该挂钩将在从任何位置提交/推送时触发构建。

    导航到您的存储库文件夹,并在其中的 'hooks' 目录中。 创建一个名为“post-receive”的新文件(您将在其中看到示例;覆盖此文件)。将以下内容放入:

    #!/bin/bash
    while read oldrev newrev refname
    do
        branch=$(git rev-parse --symbolic --abbrev-ref $refname)
        if [ "master" == "$branch" ]; then
            curl http://YOUR_JENKINS_URL:8080/git/notifyCommit?url=YOUR_GIT_REPOSITORY_URL
        fi
    done
    

    这应该可以很好地完成工作。我省略了您如何实际发布项目的实施细节,因为每个人的做法都不同。可以选择将 FTP 文件传输到某个位置,等等。我个人进入应用程序所在的文件夹并检查新创建的标签 - 一个单行命令。适合您的环境。

    其他我已经省略但你会发现有用的东西 - Ant 构建任务实际上可以做任何事情 - 在我的中,我运行 composer 来安装依赖项,运行 bower,运行 grunt,进行语法检查,编码标准检查,启动selenium 和运行 web 测试,以及许多其他的东西。它是自动化整个项目部署的工具的完美组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 2011-06-21
      • 2019-06-08
      • 2013-11-23
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多