web-dev-qa-db-ja.com

Travis-ciをローカルで実行する方法

私はプロジェクトに参加したばかりで、travis-ciは初めてです。ビルドを実行するために、.travis.ymlを少しずつ変更したり、ソースを少しずつ変更したりする必要はありません。ジェンキンズを使用すると、ジェンキンズをダウンロードしてローカルで実行することができます。トラビスはこのようなものを提供していますか?

注意:travis-ci cliを見てダウンロードしましたが、そのAPIを呼び出してgithubリポジトリに接続するだけなので、プッシュしなくても再起動しても問題ありません。最後のビルド.

426
Sam Hammamy

このプロセスにより、コンピューター上のTravisビルドジョブを完全に再現できます。また、いつでもプロセスを中断してデバッグできます。以下は、 php-school/cli-menuのジョブ#191.1 の結果を完全に再現した例です。

前提条件

  • GitHubに公開リポジトリがあります
  • Travisで少なくとも1つのビルドを実行した
  • Dockerがあります コンピューターにセットアップします

ビルド環境をセットアップする

リファレンス: https://docs.travis-ci.com/user/common-build-problems/

  1. 独自の一時ビルドIDを作成します

    BUILDID="build-$RANDOM"
    
  2. 表示 ビルドログ 、WORKER INFORMATIONの詳細表示ボタンを開いてINSTANCE行を見つけ、ここに貼り付けて実行します(コロンの後にタグを置き換えます 利用可能な最新のものと)

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
  3. ヘッドレスサーバーを実行する

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
  4. 接続されたクライアントを実行する

    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" then cat ~/.ssh/id_rsa.pubおよび ここをクリック キーを追加する
  • 参考:Docker内部からgit pullして、GitHubにプッシュする前に、開発ボックスからコミットを読み込むことができます
  • Travisが実行するコマンドを変更する場合、それがどのように動作する.travis.ymlに変換されるかを理解するのはあなたの責任です。
  • Docker環境をクリーンアップする方法がわかりません。複雑に見えますが、メモリリークが発生する可能性があります
155

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
    
  3. travisユーザーに切り替えます。

    su - travis
    
  4. Gitリポジトリを画像の/フォルダにクローンします。
  5. 依存関係を手動でインストールします。
  6. Travis CIビルドコマンドを手動で実行します。
149
Scott McLeod

更新:私は今完全なターンキー、オールインワンの答えを持っています、 https://stackoverflow.com/a/49019950/300224 を見てください。把握するのに3年しかかかりませんでした!

Travisのドキュメントによると: https://github.com/travis-ci/travis-ci 私たちが知っていて愛しているTravis CIウェブサービスを提供するために結集するプロジェクトの調合があります。次のプロジェクトのサブセットは、プロジェクトでmake testを使用してローカルの.travis.yml機能を許可するように見えます。

travis-build

travis-build 各ジョブのビルドスクリプトを作成します。これは.travis.ymlファイルから設定を取得し、travis-workerによってビルド環境で実行されるbashスクリプトを作成します。

トラビスクックブック

travis-cookbooks はビルド環境のプロビジョニングに使用される Chef cookbooksを保持します。

トラヴィスワーカー

travis-worker はクリーンな環境でビルドスクリプトを実行する責任があります。ログ出力をtravis-logsに流し、状態の更新(ビルド開始/終了)をtravis-hubにプッシュします。

(他のサブプロジェクトは、GitHub、それらのWebインターフェース、Eメール、およびそれらのAPIと通信する責任があります。)

80

Scott McLeodのものと似ていますが、これも.travis.ymlからステップを実行するためのbashスクリプトを生成します。

生成された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
eregon

wwtd(travisが行うこと) Ruby gemを使用して、ローカルマシンでtravisで実行されるのとほぼ同じ方法でテストを実行します。

ビルドマトリックスを再作成して各設定を実行します。プッシュする前に設定を確認してください。

gem i wwtd
wwtd
13
grosser

tl; dr https://docs.travis-ci.com/user/common-build-problems/#troubleshooting-locally-in-a-docker-image inで指定された画像を使用 https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli との組み合わせ。


私のビルドのテストの1つ ローカルで取得できないエラーで失敗した理由を調べたいと思いました。

動作しました。

実際にうまくいったのは、 Dockerイメージのローカルでのトラブルシューティング 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$ 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 ...に変更する必要がありました(最後から2番目の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/ にあるinstanceに記載されている画像( travis-ci-garnet-trusty-1512502259-986baf0 )が見つかりませんでした。

ワーカーバージョン を指し示す 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)そして小さくない。

5
Dušan Maďar

Travisをローカルで実行した最初の理由がよくわからない場合は、 just で試してみたいのであれば、ここでは関係ありません。

すでにホストされているTravisでの経験があり、自分のデータセンターでも同じ経験を得たい場合は、先に進んでください。

2014年12月 Travis CIより、エンタープライズオンプレミスバージョンが提供されます。

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

価格も記事の一部です。

ライセンスは座席ごとに行われ、各ライセンスには20人のユーザーが含まれます。価格は1ライセンスあたり6,000ドルから始まり、20ユーザーと5同時ビルドが含まれます。 8,500ドルの無制限のビルドでプレミアムオプションがあります。

5
Radek Simko

Travisビルドを実行するためにDockerを使用する Trevor を試すことができます。

その説明から:

私はしばしばNode.jsの複数のバージョンに対してテストを実行する必要があります。しかし、テストを実行するためだけに、n/nvmを使用して手動でバージョンを切り替えたり、コードをTravis CIにプッシュしたりしたくはありません。

だからこそ私はTrevorを作った。これは.travis.ymlを読み、あなたが要求したすべてのバージョンでテストを実行します。ちょうどTravis CIと同じです。今、あなたはプッシュの前にテストしてあなたのgit履歴をきれいに保つことができます。

2
Travis

バウンスホストを介してTravis CI環境にSSH接続することが可能です。この機能はTravis CIに組み込まれていませんが、次の手順で実現できます。

  1. バウンスホストで、travisユーザーを作成し、SSH接続できることを確認します。
  2. これらの行をあなたの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パスワードです。これらの変数は 暗号化変数 として追加できます。

  3. 変更をプッシュしてください。バウンスホストにSSH接続することができるはずです。

出典: Travis CIビルド環境へのシェル


これが完全な例です。

# 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

GitHubの c-mart/travis-Shellを参照してください


参照: デバッグのためにtravis-ciビルド環境を再現する方法

0
kenorb