我刚刚加入一个项目,对travis-ci还是陌生的。我宁可不必将.travis.yml的每一个小改动以及我对源代码所做的每一个小改动都推送到运行构建中。使用jenkins,您可以下载jenkins并在本地运行。特拉维斯提供这样的服务吗?
注意:我已经看过travis-ci cli并下载了它,但是似乎要做的就是调用他们的API,然后将其连接到我的github存储库,因此,如果我不推送,则重新启动也没关系最后一个版本。
install:
节中的设置和安装步骤而失败,而问题可能更与这些有关。
我刚刚加入一个项目,对travis-ci还是陌生的。我宁可不必将.travis.yml的每一个小改动以及我对源代码所做的每一个小改动都推送到运行构建中。使用jenkins,您可以下载jenkins并在本地运行。特拉维斯提供这样的服务吗?
注意:我已经看过travis-ci cli并下载了它,但是似乎要做的就是调用他们的API,然后将其连接到我的github存储库,因此,如果我不推送,则重新启动也没关系最后一个版本。
install:
节中的设置和安装步骤而失败,而问题可能更与这些有关。
Answers:
此过程使您可以在计算机上完全复制任何Travis构建作业。另外,您可以随时中断该过程并进行调试。以下是我在php-school / cli-menu上完美再现作业#191.1 的结果的示例。
参考:https : //docs.travis-ci.com/user/common-build-problems/
组成您自己的临时内部版本ID
BUILDID="build-$RANDOM"
查看构建日志,打开显示更多信息以获取WORKER INFORMATION并找到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
命令的好时机。您可以重新启动该过程并重播这些命令,以针对更新的代码库运行相同的测试。
ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB"
那么cat ~/.ssh/id_rsa.pub
,然后单击此处添加密钥git pull
从Docker内部从开发框中加载提交,然后再将其推送到GitHub.travis.yml
。instance:
我看不到有效的docker映像路径,就像一样travis-ci-garnet-trusty-1512502259-986baf0
。尝试travisci/ci-garnet:$INSTANCE
和travisci/$INSTANCE
-不工作,找不到图像。同样,仅使用后缀(即travisci/ci-garnet:packer-1512502259-986baf0
)也无效。
travisci/ci-garnet:packer-1512502276-986baf0
建议的图像。这是可用的,但已过时。例如,CMake比Travis中的可用版本老得多。在过去的六个月中,没有新版本的Docker Hub上载,而更早之前,每月都有很多更新。ci-garnet
sudo: required
设置?在我的当前版本中,我看到travis-ci-sardonyx-xenial-1547455603-2c98a19
可以映射到travisci / ci-sardonyx:packer-1547455648-2c98a19
Travis-ci提供了使用Docker的基于容器的新基础架构。如果您试图通过本地复制travis-ci构建来对其进行故障排除,则这将非常有用。这取自Travis CI的文档。
如果您在跟踪构建中的确切问题时遇到困难,则通常有助于在本地运行该构建。为此,您需要使用我们基于容器的基础架构(即sudo: false
您的中具有.travis.yml
),并知道您在Travis CI上使用的是哪个Docker映像。
从Docker Hub中选择一个映像。如果您没有使用特定语言的图片,请选择ci-ruby
。打开一个终端,并使用图像URL启动交互式Docker会话:
docker run -it travisci/ubuntu-ruby:18.04 /bin/bash
切换到travis
用户:
su - travis
/
映像的文件夹中。make test
。
> Manually install any dependencies
听起来这是一种获得与常规Travis版本不匹配的结果的好方法。
Manually tun your Travis CI build command
...喜欢什么?怎么样?它是什么?我有一个.travis.yml
文件。我尝试了travis-build,但这是死路一条。
更新:我现在有一个完整的交钥匙,多合一答案,请参阅https://stackoverflow.com/a/49019950/300224。只花了3年时间就知道了!
根据Travis文档:https : //github.com/travis-ci/travis-ci,有多个项目合谋提供了我们所熟悉和喜爱的Travis CI Web服务。以下项目子集似乎允许在项目中make test
使用本地功能.travis.yml
:
travis-build为每个作业创建构建脚本。它从.travis.yml
文件中获取配置,并创建一个bash
脚本,然后由travis-worker在构建环境中运行。
travis-cookbooks拥有用于提供构建环境的 Chef食谱。
travis-worker负责在干净的环境中运行构建脚本。它将日志输出流式传输到travis-logs,并将状态更新(构建开始/完成)推送到travis-hub。
(其他子项目负责与GitHub,其Web界面,电子邮件及其API进行通信。)
make test
功能的项目将是很棒的。如果您想与我合作,请发表评论。
travis-build
?回购中没有说明。
与Scott McLeod的相似,但是这也会生成一个bash脚本来运行.travis.yml中的步骤。
# 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
travis # to create ~/.travis
。Travis需要执行命令。
sudo - travis
应该是su - travis
。
/home/travis/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- travis/support (LoadError)
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 compile
tl; dr将https://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。
#troubleshooting-locally-in-a-docker-image
本节替换为本节,#running-builds-in-debug-mode
该节还描述了如何SSH到以调试模式运行的作业。
编辑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 compile
在https://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
一切都.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$
没用
遵循了该问题的可接受答案,但在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
绝对不是Trusty(Ubuntu 14.04),也不小。
http_proxy
环境git clone
。默认情况下git clone
引发 gnutls_handshake
异常。因此,我不得不执行特定bundler
版本的安装,gem install bundler -v 1.16.6
因为bundler binstubs travis
先前失败了。bundler
通过运行“ bundle info travis”来改进所需的版本
travis.yml
为可执行的Shell脚本。做得很好!对此的唯一改进将是一种机制,通过该机制可以避免在指定要从其构建的分支时手动替换字符串。
sed
命令来解决您提出的问题。在运行之前,请参阅命令bash ci.sh
。
您可以尝试Trevor,它使用Docker运行您的Travis构建。
从其描述:
我经常需要针对多个版本的Node.js运行测试。但是我不想使用n / nvm手动切换版本或将代码推送到Travis CI只是为了运行测试。
这就是为什么我创建了Trevor。它读取.travis.yml并在您请求的所有版本中运行测试,就像Travis CI一样。现在,您可以在推送之前进行测试,并保持git历史记录干净。
我不确定您在本地运行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。
whackamole
是我真正想要从事的项目的副本,在我制定构建自动化的方式时,我可以为该项目设置一个临时的Travis构建工作。一旦确定了这些内容,就重新整理数十个“ oops”提交,并推送到真正的GitHub存储库。(并可能删除whackamole
GitHub存储库和相应的Travis作业。)
可以通过退回主机SSH到Travis CI环境。该功能不是Travis CI内置的功能,但可以通过以下步骤实现。
travis
用户并确保可以对其进行SSH。将这些行放在script:
您的部分中.travis.yml
(例如,末尾)。
- echo travis:$sshpassword | sudo chpasswd
- sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
- sudo service ssh restart
- sudo apt-get install sshpass
- sshpass -p $sshpassword ssh -R 9999:localhost:22 -o StrictHostKeyChecking=no travis@$bouncehostip
$bouncehostip
您的退回主机的IP /主机在哪里,并且$sshpassword
是您定义的SSH密码。这些变量可以作为加密变量添加。
推送更改。您应该能够与退回主机建立SSH连接。
这是完整的示例:
# use the new container infrastructure
sudo: required
dist: trusty
language: python
python: "2.7"
script:
- echo travis:$sshpassword | sudo chpasswd
- sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
- sudo service ssh restart
- sudo apt-get install sshpass
- sshpass -p $sshpassword ssh -R 9999:localhost:22 -o StrictHostKeyChecking=no travisci@$bouncehostip
请参阅:c-mart/travis-shell
在GitHub上。