如何在本地运行travis-ci

Sam*_*amy 488 travis-ci

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

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

Wil*_*ken 170

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

先决条件

  • 你在GitHub上有公开的回购
  • 你在Travis上运行了至少一个版本
  • 您已在计算机上设置Docker

设置构建环境

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

  1. 组成您自己的临时构建ID

    BUILDID="build-$RANDOM"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 查看构建日志,打开WORKER INFORMATION的show more按钮并找到INSTANCE行,将其粘贴到此处并运行(使用最新的可用冒号替换冒号后的标记):

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行无头服务器

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行连接的客户端

    docker exec -it $BUILDID bash -l
    
    Run Code Online (Sandbox Code Playgroud)

运行这份工作

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

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

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

结果

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

  • 如果您的回购属于私人信息,ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB"然后cat ~/.ssh/id_rsa.pub点击此处添加关键
  • 仅供参考:您可以git pull从docker内部加载来自开发框的提交,然后再将它们推送到GitHub
  • 如果您想更改Travis运行的命令,那么您有责任弄清楚如何将其转换回工作状态.travis.yml.
  • 我不知道如何清理Docker环境,它看起来很复杂,也许这会泄漏内存

  • 在`instance:`下的日志中,我看不到有效的docker镜像路径,就像`travis-ci-garnet-trusty-1512502259-986baf0`.试过`travisci/ci-garnet:$ INSTANCE`和`travisci/$ INSTANCE` - 不起作用,找不到图像.也只是采取后缀(即`travisci/ci-garnet:packer-1512502259-986baf0`)不起作用. (18认同)
  • 您的参考链接不再起作用-即从该页面上删除了“在本地运行基于容器的Docker映像”部分。也许实例输出的差异是由于没有设置sudo:required?在我的当前版本中,我看到`travis-ci-sardonyx-xenial-1547455603-2c98a19`,我可以将其映射到[travisci / ci-sardonyx:packer-1547455648-2c98a19](https://hub.docker.com/ r / travisci / ci-sardonyx / tags) (5认同)
  • 我遇到了同样的问题 - 实例信息中提到的图像无法下载.此外,我尝试了[travis docs]中建议的`travisci/ci-garnet:packer-1512502276-986baf0`图像(https://docs.travis-ci.com/user/common-build-problems/#故障排除-本地在-A-搬运工图像).这个可用,但已过时.例如,CMake比Travis中的版本更旧.在过去的六个月中,没有新版本的"ci-garnet"上传到[Docker Hub](https://hub.docker.com/r/travisci/ci-garnet/tags/),而早期版本有很多每月更新. (4认同)
  • 对我来说,在docker hub上使用最新版本的travisci / ci-garnet(travisci / ci-garnet:packer-1515445631-7dfb2e1)达到了目的 (4认同)
  • 如果您正在使用特定语言的travis实例,则还可以使用专用图像,例如[python one](https://hub.docker.com/r/travisci/ci-python/tags)。 (2认同)
  • 所有图像至少有 2 年历史,这仍然是有效的答案吗? (2认同)

Sco*_*eod 160

Travis-ci提供了一个使用docker的基于容器的新基础架构.如果您尝试通过在本地再现它来解决travis-ci构建问题,这可能非常有用.这取自Travis CI的文档.

Docker镜像中的本地故障排除

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

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

  1. 下载并安装Docker Engine.
  2. Docker Hub中选择一个图像.如果您没有使用特定于语言的图片选择ci-ruby.打开终端并使用图像URL启动交互式Docker会话:

    docker run -it travisci/ubuntu-ruby:18.04 /bin/bash
    
    Run Code Online (Sandbox Code Playgroud)
  3. 切换到travis用户:

    su - travis
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将您的git存储库克隆到/图像的文件夹中.
  5. 手动安装任何依赖项.
  6. 手动运行Travis CI构建命令.

  • `>手动安装任何依赖项.这听起来像是一种结果与常规Travis构建不匹配的好方法. (99认同)
  • 但是,Travis CI构建命令是什么? (67认同)
  • 我觉得这是我的问题的答案,但是"手动调整你的Travis CI构建命令"......就像,什么?怎么样?它是什么?我有一个`.travis.yml`文件.我试过[travis-build](https://github.com/travis-ci/travis-build),但这是一个死胡同. (8认同)
  • @DustinGraham,这取决于Travis CI正在构建的项目是如何配置构建的.在我正在进行的项目中,构建命令是在**脚本:**子部分的**.travis.yml**文件中配置的,并且是`make test`. (6认同)
  • @Gerry通过手动安装依赖项,我认为他的意思是手动运行travis配置文件中处理依赖项安装的命令.所以这是travis CI将要执行的相同命令,而不是自动化. (6认同)
  • @Brandon你的.travis.yml里面通常有一个脚本小节,由travis调用来构建你的源代码.这个答案的要点是设置一个与travis将要运行的环境相同的本地环境.接下来,您将自己调用这些命令,而不是依赖travis为您运行它们.通过这种方式,您可以在此环境中看到自己运行每个命令的效果 - 这可以深入了解Travis中可能无法访问的构建问题. (2认同)

Wil*_*ken 83

更新:我现在有一个完整的交钥匙,一体化答案,请参阅/sf/answers/3431396531/.只花了3年时间搞清楚!

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

特拉维斯 - 建造

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

特拉维斯 - 食谱

travis-cookbooks拥有用于配置构建环境的 Chef cookbook.

特拉维斯工人

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

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

  • 我如何实际安装和运行`travis-build`?回购中没有说明. (20认同)
  • 由于DDOS,今天GitHub已经关闭https://github.com/blog/1981-large-scale-ddos-attack-on-github-com这就是我们需要本地测试的原因 (5认同)
  • 我相信只使用这三个组件并执行`make test`功能的项目会很棒.评论你是否愿意与我合作. (4认同)
  • 关于这个[关于travis repo](https://github.com/travis-ci/travis-ci/issues/2114). (4认同)

ere*_*gon 22

与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
Run Code Online (Sandbox Code Playgroud)

  • sudo-travis应该是su-travis。 (3认同)
  • @BerenddeBoer :如果你还没有弄清楚这个问题:这里是摆脱问题的解决方案`cd ~/.travis/travis-build/ bundle install bundler add travis bundler binstubs travis cd <REPO_YOU_WANT_TO_RUN_COMPILE_IN> ~/. travis/travis-build/bin/travis 编译` (2认同)
  • travis编译不再有效吗?我看到未知的命令编译:/ travis -h没有显示://// (2认同)

gro*_*ser 16

使用wwtd(travis会做什么) ruby gem在本地计算机上运行测试,就像在travis上运行一样.

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

gem i wwtd
wwtd
Run Code Online (Sandbox Code Playgroud)


Duš*_*ďar 10

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-on-travis-cli


编辑2019-07-26

#troubleshooting-locally-in-a-docker-image本节不再是文档的一部分;这就是为什么


但是,它仍然在git历史中:https : //github.com/travis-ci/docs-travis-ci-com/pull/2193

在以下位置查找(相当旧的,找不到较新的)映像版本:https : //travis-ci.org/travis-ci/docs-travis-ci-com/builds/230889063#L661



我想检查一下为什么我的构建中的一个测试失败并显示了错误,而该错误不是我在本地得到的。

工作了。

实际可行的方法是使用Docker Image docs页面中的本地故障排除中指定的图像。就我而言travisci/ci-garnet:packer-1512502276-986baf0

我能够添加travise compilehttps://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli中描述的以下步骤。

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$ sed -i 's,--branch\\=\\\x27\\\x27,--branch\\=master,g' ci.sh
travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ bash ci.sh
Run Code Online (Sandbox Code Playgroud)

一切都.travis.yml按预期执行(安装了依赖项,运行了测试,...)。

请注意,在运行之前,bash ci.sh我必须在中更改--branch\=\'\'\--branch\=master\(请参阅倒数第二个sed -i ...命令)ci.sh

如果这样不起作用,则下面的命令将有助于识别目标行号,您可以手动编辑该行。

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$
Run Code Online (Sandbox Code Playgroud)

没用

遵循了该问题的可接受答案,但在https://hub.docker.com/u/travisci/上未找到travis-ci-garnet-trusty-1512502259-986baf0提及的图像()。instance

生成工作程序版本指向travis-ci / worker提交及其作为映像注册表的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
Run Code Online (Sandbox Code Playgroud)

绝对不是Trusty(Ubuntu 14.04),也不小。


Rad*_*mko 6

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

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

201412月起, Travis CI提供企业内部部署版本.

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

定价也是文章的一部分:

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

  • @gregturn我想出的一个丑陋但减压的解决方法是将我的repo克隆到第二个GitHub仓库.所以repo`whackamole`是我真正想要工作的项目的副本,我可以为该项目设置一个临时的Travis构建工作,同时解决构建自动化的问题.一旦我确定了这一点,就可以退出几十个"oops"提交并推送到真正的GitHub仓库.(并且可能删除`whackamole` GitHub repo和相应的Travis作业.) (4认同)
  • 我其实也对此感兴趣.我正在尝试为一个非常尴尬的项目配置travis作业.所有这些4月26日的提交都在摆弄.travis.yml文件(https://github.com/gregturn/issue-aggregator/commits/master).我希望有一种更简单的方法来修改配置,而无需推送每一个编辑. (3认同)
  • 不知道6000美元的许可证费用是一次性还是每年一次. (3认同)

Tra*_*vis 6

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

从其描述:

我经常需要针对多个版本的Node.js运行测试。但是我不想使用n / nvm手动切换版本或将代码推送到Travis CI只是为了运行测试。

这就是为什么我创建了Trevor。它读取.travis.yml并在您请求的所有版本中运行测试,就像Travis CI一样。现在,您可以在推送之前进行测试,并保持git历史记录干净。

  • 似乎专门用于 node.js。扩展它会很好 (3认同)
  • 仅供那些希望尝试此操作的人使用...不支持 PHP (2认同)