首页 文章

如何在本地运行travis-ci

提问于
浏览
371

我刚加入了一个项目,我是travis-ci的新手 . 我宁愿不必将每一个小改动都推到.travis.yml以及我为源代码运行构建所做的每一点改变 . 使用jenkins,您可以下载jenkins并在本地运行 . 特拉维斯提供这样的东西吗?

注意:我已经看过travis-ci cli并下载了它,但它似乎只是调用它们的API,然后连接到我的github repo,所以如果我不推送,重启就没关系最后一次构建 .

9 回答

  • 13

    UPDATE: this answer is not up to date anymore

    你可以试试https://github.com/jolicode/JoliCi

    它使用docker试图成为travis-ci的本地替代品 . 它应该支持php,nodejs和ruby . 如果缺少某些东西,您可以在项目页面上提交错误

  • 144

    UPDATE: I now have a complete turnkey, all-in-one answer, see https://stackoverflow.com/a/49019950/300224. Only took 3 years to figure out!

    根据特拉维斯的文件:https://github.com/travis-ci/travis-ci,有一个项目的混合物串起来提供我们熟悉和喜爱的Travis CI网络服务 . 以下项目子集似乎允许使用项目中的 .travis.yml 本地 make test 功能:

    travis-build

    travis-build为每个作业创建构建脚本 . 它从 .travis.yml 文件获取配置并创建一个 bash 脚本,然后由travis-worker在构建环境中运行 .

    travis-cookbooks

    travis-cookbooks包含用于配置构建环境的Chef cookbook .

    travis-worker

    travis-worker负责在干净的环境中运行构建脚本 . 它将日志输出流式传输到travis-logs并将状态更新(构建开始/完成)推送到travis-hub .

    (其他子项目负责与GitHub,他们的Web界面,电子邮件及其API进行通信 . )

  • 24

    此过程允许您在计算机上完全复制任何Travis构建作业 . 此外,您可以随时中断该过程并进行调试 . 下面是一个例子,我完美地重现了job #191.1 on php-school/cli-menu的结果 .

    先决条件

    • 您在GitHub上有公开回购

    • 您在Travis上至少运行了一次构建

    • You have Docker在您的计算机上进行了设置

    设置构建环境

    参考:https://docs.travis-ci.com/user/common-build-problems/

    • 制作您自己的临时构建ID
    BUILDID="build-$RANDOM"
    
    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
    • 运行无头服务器
    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
    • 运行连接的客户端
    docker exec -it $BUILDID bash -l
    

    运行作业

    现在您已进入Travis环境 . 运行 su - travis 开始 .

    这个步骤定义明确,但更繁琐且手动 . 您将找到Travis在环境中运行的所有命令 . 要执行此操作,请在右列中查找具有0.03s标记的所有内容 .

    enter image description here

    在左侧,您将看到实际的命令 . 按顺序运行这些命令 .

    结果

    现在是运行 history 命令的好时机 . 您可以重新启动该进程并重播这些命令,以针对更新的代码库运行相同的测试 .

    • 如果您的仓库是私有的: ssh-keygen -t rsa -b 4096 -C “YOUR EMAIL REGISTERED IN GITHUB” 然后 cat ~/.ssh/id_rsa.pubclick here添加密钥

    • 仅供参考:您可以从docker内部 git pull 加载来自开发框的提交,然后再将它们推送到GitHub

    • 如果您想更改Travis运行的命令,那么您有责任弄清楚如何将其转换回工作 .travis.yml .

    • 我不知道如何清理Docker环境,它看起来很复杂,也许这会泄漏内存

  • 78

    使用wwtd (what would travis do) ruby gem在本地计算机上运行测试,就像在travis上运行一样 .

    它将重新创建构建矩阵并运行每个配置,非常适合在推送之前进行完整性检查设置 .

    gem i wwtd
    wwtd
    
  • 5

    与Scott McLeod相似,但这也会生成一个bash脚本来运行.travis.yml中的步骤 .

    使用生成的Bash脚本在Docker中进行本地故障排除

    # choose the image according to the language chosen in .travis.yml
    $ docker run -it -u travis quay.io/travisci/travis-jvm /bin/bash
    
    # now that you are in the docker image, switch to the travis user
    sudo - travis
    
    # Install a recent ruby (default is 1.9.3)
    rvm install 2.3.0
    rvm use 2.3.0
    
    # Install travis-build to generate a .sh out of .travis.yml
    cd builds
    git clone https://github.com/travis-ci/travis-build.git
    cd travis-build
    gem install travis
    # to create ~/.travis
    travis version
    ln -s `pwd` ~/.travis/travis-build
    bundle install
    
    # Create project dir, assuming your project is `AUTHOR/PROJECT` on GitHub
    cd ~/builds
    mkdir AUTHOR
    cd AUTHOR
    git clone https://github.com/AUTHOR/PROJECT.git
    cd PROJECT
    # change to the branch or commit you want to investigate
    travis compile > ci.sh
    # You most likely will need to edit ci.sh as it ignores matrix and env
    bash ci.sh
    
  • 18

    我不确定你在本地运行特拉维斯的原因是什么,如果你想要玩它,那么请停止阅读,因为这对你来说无关紧要 .

    如果您已经拥有托管Travis的经验并希望在自己的数据中心获得相同的体验,请继续阅读 .

    Dec 2014 Travis CI提供企业内部部署版本 .

    http://blog.travis-ci.com/2014-12-19-introducing-travis-ci-enterprise/

    定价也是文章的一部分:

    许可是按席位完成的,每个许可包括20个用户 . 每个许可证的起价为6,000美元,其中包括20个用户和5个并发版本 . 这是一个高级选项,无限制,8,500美元 .

  • 1

    tl;drhttps://docs.travis-ci.com/user/common-build-problems/#troubleshooting-locally-in-a-docker-image中指定的图像与https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli结合使用 .


    我想检查为什么one of the tests in my build失败并出现错误我无法在本地获取 .

    Worked.

    实际工作的是使用Troubleshooting Locally in a Docker Image docs页面中指定的图像 . 就我而言,它是 travisci/ci-garnet:packer-1512502276-986baf0 .

    我能够按照https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli中描述的步骤添加 travise compile .

    dm@z580:~$ docker run --name travis-debug -dit travisci/ci-garnet:packer-1512502276-986baf0 /sbin/init
    dm@z580:~$ docker images
    REPOSITORY                       TAG                          IMAGE ID            CREATED             SIZE
    travisci/ci-garnet               packer-1512502276-986baf0    6cbda6a950d3        11 months ago       10.2GB
    dm@z580:~$ docker exec -it travis-debug bash -l
    root@912e43dbfea4:/# su - travis
    travis@912e43dbfea4:~$ cd builds/
    travis@912e43dbfea4:~/builds$ git clone https://github.com/travis-ci/travis-build
    travis@912e43dbfea4:~/builds$ cd travis-build
    travis@912e43dbfea4:~/builds/travis-build$ mkdir -p ~/.travis
    travis@912e43dbfea4:~/builds/travis-build$ ln -s $PWD ~/.travis/travis-build
    travis@912e43dbfea4:~/builds/travis-build$ gem install bundler
    travis@912e43dbfea4:~/builds/travis-build$ bundle install --gemfile ~/.travis/travis-build/Gemfile
    travis@912e43dbfea4:~/builds/travis-build$ bundler binstubs travis
    travis@912e43dbfea4:~/builds/travis-build$ cd ..
    travis@912e43dbfea4:~/builds$ git clone --depth=50 --branch=master https://github.com/DusanMadar/PySyncDroid.git DusanMadar/PySyncDroid
    travis@912e43dbfea4:~/builds$ cd DusanMadar/PySyncDroid/
    travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ ~/.travis/travis-build/bin/travis compile > ci.sh
    travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ bash ci.sh
    

    请注意,在运行 bash ci.sh 之前,我必须将 --branch\=\'\'\ 更改为 --branch\=master\ 并保存文件 . 下面的命令有助于识别行号 .

    travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ cat ci.sh | grep -in branch
    840:    travis_cmd git\ clone\ --depth\=50\ --branch\=\'\'\ https://github.com/DusanMadar/PySyncDroid.git\ DusanMadar/PySyncDroid --echo --retry --timing
    889:export TRAVIS_BRANCH=''
    899:export TRAVIS_PULL_REQUEST_BRANCH=''
    travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$
    

    来自 .travis.yml 的所有内容都按预期执行(安装了依赖项,测试运行,......) .

    Didn't work.

    按照此问题的接受答案,但没有找到 instancehttps://hub.docker.com/u/travisci/提到的图像(travis-ci-garnet-trusty-1512502259-986baf0) .

    构建worker version指向travis-ci/worker commit,它是travis-worker-install引用 quay.io/travisci/ 作为图像注册表 . 所以我试了一下 .

    dm@z580:~$ docker run -it -u travis quay.io/travisci/travis-python /bin/bash
    travis@370c23a773c9:/$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 12.04.5 LTS
    Release:    12.04
    Codename:   precise
    travis@370c23a773c9:/$
    dm@z580:~$ docker images 
    REPOSITORY                       TAG                          IMAGE ID            CREATED             SIZE
    quay.io/travisci/travis-python   latest                       753a216d776c        3 years ago         5.36GB
    

    绝对不可靠(Ubuntu 14.04)也不小 .

  • 1

    Travis-ci提供了一个使用docker的基于容器的新基础架构 . 如果您're trying to troubleshoot a travis-ci build by reproducing it locally. This is taken from Travis CI' documentation,这可能非常有用 .

    Docker镜像中的本地故障排除

    如果您在跟踪构建中的确切问题时遇到问题,那么在本地运行构建通常会有所帮助 . 为此,您需要使用我们基于容器的基础架构(即 .travis.yml 中包含 sudo: false ),并了解您在Travis CI上使用的Docker镜像 .

    本地运行基于容器的Docker镜像

    • 下载并安装Docker Engine .

    • Docker Hub中选择图像 . 如果您没有使用特定于语言的图片,请选择 ci-ruby . 打开终端并使用图像URL启动交互式Docker会话:

    docker run -it travisci/ci-ruby /bin/bash
    
    • 切换到 travis 用户:
    su - travis
    
    • 将您的git存储库克隆到图像的 / 文件夹中 .

    • 手动安装任何依赖项 .

    • 手动运行Travis CI构建命令 .

  • 86

    您可以尝试Trevor,它使用Docker来运行您的Travis构建 .

    从它的描述:

    我经常需要为多个版本的Node.js运行测试 . 但是我不想使用n / nvm手动切换版本或者只是为了运行测试而将代码推送到Travis CI . 这就是我创造特雷弗的原因 . 它读取.travis.yml并在您请求的所有版本中运行测试,就像Travis CI一样 . 现在,您可以在推送之前进行测试并保持您的git历史记录清洁 .

相关问题