当前位置: 首页 > 后端技术 > PHP

TravisCI自动化部署博客

时间:2023-03-29 17:05:25 PHP

TravisCI是软件开发领域的在线、分布式持续集成服务,用于构建和测试托管在GitHub上的代码。Travis很好地集成了GitHub。与Jenkis不同,Travis不需要在服务器上自己部署服务,并且与GitHub高度集成,因此对开源项目非常友好。注册配置Travis注册成功,登录,然后在GitHub上添加自己的repo,选择一个或多个你需要集成的项目,开始build,就是点击叉号变成打勾的过程。假设现在某个项目已经启用了Travis,那么首先查看Settings中默认启用的项目,根据自己的实际需要进行设置。如果没有特殊要求,默认设置即可。接下来的步骤就很清楚了,官方也有图解:Adding.travis.yml说白了,接下来就是这个配置文件怎么写了,因为Travis是根据这个配置文件进行相应的动作。根据你使用的语言不同,配置会有很大的不同,因为我的博客是使用PHPLaravel这个流行的框架写的,所以这里我也以它为例。官方给出的最精简的PHP配置文件是:language:phpphp:-7.1.9-nightlytriggerbuild接下来和上面第三步一样,将这个.travis.yml文件提交到GitHub,Travis会自动触发构建任务。第一次就知道不会这么简单,结果失败了。..报错原因是执行phpunit时提示:PHPWarning:require(/home/travis/build/stephencode/super-admin/bootstrap/../vendor/autoload.php):failedtoopenstream:Nosuch17行/home/travis/build/stephencode/super-admin/bootstrap/autoload.php中的文件或目录,貌似没有找到自己项目的composer依赖包的autoload.php文件,应该是composerup等操作没有进行,结合网上查到的资料,比较好的方案是在install层加一行:install:-composerinstall--prefer-dist--optimize-autoloader--quiet这样就不会报上面的错误了,然后下一个就报错了。..1)Tests\Feature\RouteTest::testBasicTestRuntimeException:没有指定应用程序加密密钥。其实这是因为我在Laravel中的phpunit.xml没有配置好。只需在标签中添加,您就可以自己生成这个密钥。在经历了五六次build失败后,终于得到了回报。自动部署到远程服务器现在构建可以自动化,下一步就是部署到远程服务器。Travis提供了after_success来实现这一步。等等,如果我们要部署到远程服务器,就必须要让Travis登录远程服务,那么登录密码怎么处理才能保证安全呢?这是第一个要解决的问题,明文是肯定不行的。要对登录密码进行加密,看来首先要解决这个问题。TravisDocs也帮助我考虑了这个不可避免的问题(加密文件)的解决方案。一起来实践一下:首先,通过Rubygem安装travisgeminstalltr??avis,重试了几次,发现敲完这个shell,就如石沉大海,连个屁都没放。..即使开启了代理,它仍然完全不动。没办法,只能换镜像了。$gemsources-l***CURRENTSOURCES***https://rubygems.org/查看当前镜像,这个产品(rubygems)在国内出奇的难获取,网上搜索国内镜像源,RubyChina应该是很显眼的~$gemupdate--system$gemsources--addhttps://gems.ruby-china.org/然后查看gem镜像确保只有RubyChinagem源。好了,现在你可以愉快的安装travis了$sudogeminstalltr??avis接下来,我们先在命令行登录Travis$travislogin我们需要你的GitHub登录来识别你。此信息不会发送到TravisCI,只会发送到api.github.com。不会显示密码。如果不想输入密码,请尝试使用--github-token或--auto运行。用户名:xxx@xxx.xxxxxx@xxx.xxx的密码:***作为演示成功登录!你会被要求输入你的GitHub账号密码,这是一个GitHub服务,不用担心密码泄露。将目录更改为项目根目录,即.travis.yml目录。因为我们需要让travis远程登录我们的服务器,所以我们需要对本地存储的SSH私钥进行加密(默认你也是使用SSH免密码登录方式,不清楚的可以参考我的文章《SSH 免密登录》)。$travisencrypt-file~/.ssh/id_rsa--addDetectedrepositoryasxxx/xxx,这是正确的吗?|是|yesencrypting~/.ssh/id_rsaforxxx/xxxstoringresultasid_rsa.encstoringsecureenvvariablesfordecryptionMakesuretoaddid_rsa.enctothegitrepository.确保不要将~/.ssh/id_rsa添加到git存储库。提交对.travis.yml的所有更改。这时候看一下当前目录下的.travis.yml,会在_install之前多几行:-opensslaes-256-cbc-K$encrypted_d89376f3278d_key-iv$encrypted_d89376f3278d_iv-inid_rsa.enc-out~\/.ssh/id_rsa-d为了保证权限正常,在shellbefore_install中加入一行:-opensslaes-256-cbc-K$encrypted_d89376f3278d_key-iv$encrypted_d89376f3278d_iv-inid_rsa.enc-out~/.ssh/id_rsa-d-chmod600~/.ssh/id_rsa可能还要用到一点,因为travis第一次登录远程服务器会出现SSH主机认证,这里会出现主机信任问题。官方的解决办法是添加addons配置:addons:ssh_known_hosts:your-ip这里travis可以免密登录到你的远程服务器~自动部署既然可以免密登录到服务器,那么写一个部署脚本,在登录的时候执行脚本,一切就这么自然~我写部署脚本的shell脚本水平有限,所以放一个最精简的Demo供参考:#!/bin/bashcd/path/to/your-projectgitpulloriginmasterecho'travisbuilddone!'执行部署脚本,在.travis.yml配置文件中写入这两行:after_success:-sshyour-user@your-ip"./your-shell-script"记得替换your-user,your-ip,your-shell-script用你自己的!高大尚Logo辛苦了一整天,总希望别人看到自己的劳动成果。除了写这篇文章,他还能做什么?那自然是我自己的项目在GitHub上的README.md中显示了一个高大上的build:passing标识,像这样:综上所述,这个过程基本上是一个我没参加过会议的学习过程,从中学到了一个很多新东西,也发现了自己的一些不足,比如写shell脚本。..最后贴上我自己的.travis.yml,涉及个人隐私的部分我会评论说明:language:phpphp:-7.1.9-nightlyenv:-APP_DEBUG=falsebefore_install:-opensslaes-256-cbc-K$encrypted_d89376f3278d_key-iv$encrypted_d89376f3278d_iv-inid_rsa.enc-out~/.ssh/id_rsa-d-chmod600~/.ssh/id_rsainstall:-composerinstall--prefer-dist--optimize-autoloader--quietnotifications:电子邮件:收件人:-stephenfxl@gmail.comon_success:alwayson_failure:alwaysscript:-phpunit-cphpunit.xml--coverage-textafter_success:-sshxxx@xxxx.xxxx.xxxx.xxxx"./travis_build"#请替换为您自己的登录IPandloginuseraddons:ssh_known_hosts:xxxx.xxxx.xxxx.xxxx#请替换成你自己的服务器IP本文参考链接:使用Travis进行持续集成Jekyll+TravisCI自动化部署博客