web-dev-qa-db-ja.com

Travis CIの「git clone」ステップをカスタマイズ/オーバーライドするにはどうすればよいですか?

インストール手順では、Travis CIは次のようなリポジトリのクローンを作成します。

git clone --depth=50 --branch=master https://github.com/user/repo.git user/repo

これをカスタマイズ/オーバーライドするにはどうすればよいですか?


背景:タグベースのデプロイを使用しています。 Travisがタグ付きビルドをチェックアウトする方法(--branch=<tagname>)、gitリポジトリはデタッチされた状態で、ブランチにアクセスできません。ただし、展開では、自分がどのブランチにいるかを知る必要があります。私の解決策は、「通常の」クローンを作成してから、タグ付きコミットに切り替えることです。

26
ericteubert

インストール手順でリポジトリ再びを複製できます。この方法では、リポジトリを2回複製しますが、動作するようです。

# .travis.yml
install:
  - git clone https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_REPO_SLUG
  - cd $TRAVIS_REPO_SLUG
  - git checkout -qf $TRAVIS_COMMIT
16
ericteubert

Travis docs ごとに.travis.ymlに以下を追加して --depth フラグを削除できます。

git:
  depth: false

--depth--single-branchを意味するため、このフラグを削除すると、allブランチがチェックアウトされますが、これはデフォルトの動作ではありません。

4
jonrsharpe

リポジトリ全体にアクセスするには、次のものが必要であることがわかりました。

install:
  - git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
  - git fetch --unshallow --tags

これにより、リモートのブランチやタグにアクセスできるようになります(たとえば、チェックアウトを実行できます)。

タグを使用しているが、切り離された状態にしたくない場合HEAD状態にするには、タグを指す新しいブランチを作成できます( この説明に従って )。 ):

install:
  - git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
  - git fetch --unshallow --tags
  - git symbolic-ref --short HEAD || git checkout -b ${TRAVIS_BRANCH}-test $TRAVIS_BRANCH

注:切り離されたHEAD状態にある場合、git symbolic-ref --short HEADは失敗します。

3
thisismydesign

ビルド中にこれを実行して、Originタグ/ブランチにアクセスします

git config remote.Origin.fetch "+refs/heads/*:refs/remotes/Origin/*" 1>/dev/null
git fetch Origin -q

その後、このコマンドを実行して、コミットを含むブランチを見つけることができます

BRANCHES=`git branch -a --contains "$TRAVIS_TAG"`

ずっと前に、継続的なデプロイメントの目的でタグが作成された「environment」ブランチをフェッチするためのスクリプトを作成しました。

それはあなたに刺激を与えるかもしれません: https://Gist.github.com/rolebi/a0eb1f783b7f3a5f21a631c8da1582dc

そのように使用してください:

TARGET_ENV="`test $TRAVIS_TAG && bash scripts/get_branch_for_git_reference.sh $TRAVIS_TAG`"
1
rolebi

問題は、あなたが独立したブランチにいるということではありません。それはgitがタグをフェッチすることを許可していないということです:git fetch --tagsは指定した--branchコマンドのgit cloneで指定されたブランチのみをフェッチします。

これについて詳しく説明します この答え

問題を解決するには(特定のタグをチェックアウトする)、リポジトリが複製された後、次のようなスクリプトを呼び出すことができます。

    # Keep track of where Travis put us.
    # We are on a detached head, and we need to be able to go back to it.
    build_head=$(git rev-parse HEAD)

    # fetch the tags
    git config --replace-all remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
    git fetch --tags

    # checkout the tagged commit
    git checkout -qf <your tag>

    # now do your stuff

    # go back to where we were at the beginning
    git checkout ${build_head}
1
little-dude

または、リモートにクエリを実行することもできます。以下を.travis.ymlに追加します。

env:
    global:
        # get all the branches referencing this commit
        - REAL_BRANCH=$(git ls-remote Origin | sed -n "\|$TRAVIS_COMMIT\s\+refs/heads/|{s///p}")

        # or check if we are on a particular branch:
        - IS_RELEASE=$(git ls-remote Origin | grep "$TRAVIS_COMMIT\s\+refs/heads/release$"

(Gitの達人がまだこれを考え出していないことに驚いています)

0

既存の浅いクローンを完全なクローンに変換できます。これを行うには、インストール手順中にgit fetch --unshallow(gitバージョン1.8.3以降で使用可能)を実行します。

# .travis.yml
install:
  - git fetch --unshallow --tags

-tagsフラグは、タグがチェックアウトされたブランチに属していない場合でも、すべてのタグを強制的にフェッチします。これは、ビルドが他のブランチのタグにも依存している場合に必要です。

0
Florian Dreier