Travis-ci提供了一个使用docker的基于容器的新基础架构。如果您尝试通过在本地再现它来解决travis-ci构建问题,这可能非常有用。这取自Travis CI 文件 。
如果您在跟踪构建中的确切问题时遇到问题,那么在本地运行构建通常会有所帮助。要做到这一点,你需要使用我们基于容器的基础设施(即,有 sudo: false 在你的 .travis.yml ),并了解您在Travis CI上使用的Docker镜像。
sudo: false
.travis.yml
从中选择图像 Docker Hub 。如果您没有使用特定于语言的图片选择 ci-ruby 。打开终端并使用图像URL启动交互式Docker会话:
ci-ruby
docker run -it travisci/ci-ruby /bin/bash
切换到 travis 用户:
travis
su - travis
/
如果你的话,我不确定你在本地运行特拉维斯的原因是什么 的 只是 强> 我想玩它,然后在这里停止阅读,因为它与你无关。
如果您已经拥有托管Travis的经验并希望在自己的数据中心获得相同的体验,请继续阅读。
以来 的 2014年12月 强> Travis CI提供企业内部部署版本。
http://blog.travis-ci.com/2014-12-19-introducing-travis-ci-enterprise/
定价也是文章的一部分:
许可是按席位完成的,每个许可包括20个用户。每个许可证的起价为6,000美元,其中包括20个用户和5个并发版本。这是一个高级选项,无限制,8,500美元。
使用 wwtd(特拉维斯会做什么) ruby gem在本地计算机上运行测试,就像在travis上运行一样。
它将重新创建构建矩阵并运行每个配置,非常适合在推送之前进行完整性检查设置。
gem i wwtd wwtd
你可以试试 特雷弗 ,它使用Docker来运行Travis构建。
从它的描述:
我经常需要为多个版本的Node.js运行测试。但是我不想使用n / nvm手动切换版本或者只是为了运行测试而将代码推送到Travis CI。 这就是我创造特雷弗的原因。它读取.travis.yml并在您请求的所有版本中运行测试,就像Travis CI一样。现在,您可以在推送之前进行测试并保持您的git历史记录清洁。
我经常需要为多个版本的Node.js运行测试。但是我不想使用n / nvm手动切换版本或者只是为了运行测试而将代码推送到Travis CI。
这就是我创造特雷弗的原因。它读取.travis.yml并在您请求的所有版本中运行测试,就像Travis CI一样。现在,您可以在推送之前进行测试并保持您的git历史记录清洁。
的 TL;博士 强> 使用指定的图像 https://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 。
我想检查一下原因 我构建中的一个测试 失败了,我没有在当地得到错误。
的 工作。 强>
实际工作的是使用指定的图像 Docker镜像中的本地故障排除 docs页面。就我而言 travisci/ci-garnet:packer-1512502276-986baf0 。
travisci/ci-garnet:packer-1512502276-986baf0
我能够添加 travise compile 以下步骤描述 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\ 并保存文件。下面的命令有助于识别行号。
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 按预期执行(安装依赖项,测试运行,...)。
的 没工作。 强>
遵循这个问题的接受答案,但没有 找到图像( travis-ci-garnet-trusty-1512502259-986baf0 )提到的 instance 在 https://hub.docker.com/u/travisci/ 。
travis-ci-garnet-trusty-1512502259-986baf0
instance
建立 工人版 指着 travis-ci /工人承诺 和它的 特拉维斯工人安装 引用 quay.io/travisci/ 作为图像注册表。所以我试了一下。
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)也不小。
此过程允许您在计算机上完全复制任何Travis构建作业。此外,您可以随时中断该过程并进行调试。下面是一个我完美再现结果的例子 php-school / cli-menu上的#191.1工作 。
参考: https://docs.travis-ci.com/user/common-build-problems/
组成您自己的临时构建ID
BUILDID="build-$RANDOM"
视图 构建日志 ,打开显示更多工作信息按钮,找到INSTANCE行,将其粘贴到此处并运行(在冒号后替换标签) 最新的一个) :
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 。
在左侧,您将看到实际的命令。按顺序运行这些命令。
现在是运行的好时机 history 命令。您可以重新启动该进程并重播这些命令,以针对更新的代码库运行相同的测试。
history
ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB"
cat ~/.ssh/id_rsa.pub
git pull