【问题标题】:Running Travis locally using docker使用 docker 在本地运行 Travis
【发布时间】:2025-12-27 19:45:06
【问题描述】:

我正在尝试使用他们的 docker 镜像 (Their docker images) 在我的本地机器上运行 travis build。他们的指令是here

我能够下载并运行 docker 机器,我切换到 travis 用户,并克隆我的 repo。但我不太明白如何运行 travis.yml 文件以便开始构建。

我已经搜索并尝试使用 travis-clitravis-build 但没有成功。我愿意接受有关在运行 travis 之前/期间/之后与 travis build 交互(当然使用命令行)的建议(为了更快的调试)。

【问题讨论】:

  • travis-build 会将.travis.yml 转换为build.sh。你遇到了什么问题?
  • @набиячлэвэлиь 我安装了 travis-cli,但甚至无法安装 travis-build
  • 我也尝试使用 travis-build github.com/travis-ci/travis-build 没有成功。 @Nir,基于您应该执行~/.travis/travis-build/bin/travis compile 的帮助,但至少在我的情况下它没有工作。尽管基于travis lint 有一个干净的.travis.yml,但我有一个无法恢复的错误。

标签: docker containers travis-ci


【解决方案1】:

我设法将来自各种来源的 Dockerfile 拼凑在一起,其中一些来自我自己。有两张图片:一张用于travis 的基础可用,一张用于“org/repo”GitHub 项目的特定项目(确保将出现的项目替换为真实的项目名称)。它使用本地未提交的存储库版本(因此是seds)。在travis-local-build 启动并运行之后,./build.sh 将触发类似于 travis-ci.org 的 CI 构建。

Dockerfile.travis-local

#!docker build -f Dockerfile.travis-local -t travis-local .

FROM travisci/ci-amethyst:packer-1512508255-986baf0
USER travis

WORKDIR /home/travis
RUN git clone https://github.com/travis-ci/travis-build.git

WORKDIR travis-build
RUN bash -lc "gem install travis"
RUN bash -lc travis # to create ~/.travis
RUN ln -s $(pwd) ~/.travis/travis-build
RUN bash -lc "bundle install"
#RUN bash -lc "bundler add travis"
RUN bash -lc "bundler binstubs travis"
RUN echo alias travis="~/.travis/travis-build/bin/travis" >> ~/.bashrc

Dockerfile.travis-local-build

#!docker build -f Dockerfile.travis-local-build -t travis-local-build . && docker run -ti travis-local-build

FROM travis-local
USER travis

WORKDIR /home/travis/build
ADD --chown=travis . org/repo

WORKDIR org/repo
RUN chmod +x gradlew
# Alias not recognized, but in interactive mode `travis compile` works without path.
RUN bash -lc "~/.travis/travis-build/bin/travis compile --no-interactive > build.sh"
RUN sed -re 's/^.*travis_wait_for_network '\''.*$/echo DISABLED &/mg' build.sh --in-place
RUN sed -re 's/^.*apt-get update.*$/echo DISABLED &/mg' build.sh --in-place
RUN sed -re 's/^.*travis_cmd git.*(fetch|reset|checkout).*$/echo DISABLED &/mg' build.sh --in-place
RUN chmod +x build.sh

WORKDIR /home/travis/build
RUN sudo ln -s org/repo/build.sh build.sh
CMD ["bash"]

免责声明:我是 Docker 新手,只使用了几个小时,所以我可能会弄错一些概念。在 cmets 中赞赏任何指针。

【讨论】:

    【解决方案2】:

    我设法在Travis blog 中找到了一种使用 docker 的解决方案。我使用 docker 打包整个项目,然后告诉 Travis 下载 docker 镜像,运行它,然后运行测试。

    通过这种方式,我可以使用本地容器进行快速调试,并且知道我的环境是干净的,并且如果测试在容器上运行,它们肯定在 Travis 上运行(因为他也使用相同的容器,而生产使用它作为好)。

    【讨论】:

    • 链接到的帖子是关于在 Travis 中使用 Docker,而不是在 Docker 中使用 Travis。
    • 是的,但这是我找到的最佳解决方案,它并不完美,而且 Docker 中的 Travis 也不存在。所以我想我会分享它,一文不值。