web-dev-qa-db-fra.com

Comment personnaliser/ignorer l'étape "git clone" dans Travis CI?

À l’étape de l’installation, Travis CI clone le dépôt, qui ressemble à ceci:

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

Comment puis-je personnaliser/annuler cela?


Contexte: J'utilise des déploiements basés sur des balises. De la même manière que Travis extrait les constructions marquées (--branch=<tagname>), le référentiel git est détaché sans accès aux branches. Cependant, pour le déploiement, j'ai besoin de savoir sur quelle branche je suis. Ma solution est de faire un clone "normal" puis de passer au commit étiqueté.

21
ericteubert

Vous pouvez cloner le référentiel à nouveau au cours de l'étape d'installation. De cette façon, vous clonez le référentiel deux fois, mais cela semble fonctionner.

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

J'ai constaté que pour avoir accès à l'ensemble de votre pension, vous avez besoin des éléments suivants:

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

De cette façon, vous aurez accès aux branches et balises distantes (par exemple, vous pouvez effectuer le paiement).

Si vous êtes sur une balise mais que vous ne voulez plus être dans un état détaché HEAD, vous pouvez créer une nouvelle branche qui pointe sur la balise (selon cette discussion ):

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

Remarque: git symbolic-ref --short HEAD échouera si vous êtes dans un état détaché HEAD.

3
thisismydesign

Exécutez ceci pendant votre construction pour avoir accès aux tags/branches Origin

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

Après cela, vous pouvez exécuter cette commande pour trouver les branches contenant votre commit.

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

J'ai créé un script il y a très longtemps pour récupérer la branche "environnement" où la balise a été créée à des fins de déploiement continu.

Cela peut vous inspirer: https://Gist.github.com/rolebi/a0eb1f783b7f3a5f21a631c8da1582dc

Utilisez-le comme ça:

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

Le problème n'est pas vraiment que vous êtes dans une branche isolée. C’est que git ne vous autorise pas à récupérer les balises: git fetch --tags ne cherchera que la branche spécifiée par --branch dans la commande git clone que vous avez donnée.

Je l'explique plus en détail cette réponse .

Pour résoudre votre problème (en extrayant une balise spécifique), vous pouvez appeler un script qui ressemble à ceci après le clonage du référentiel:

    # 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

Ou vous pouvez simplement interroger la télécommande. Ajoutez ce qui suit à .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$"

(Je suis surpris que les gourous n’aient pas déjà proposé celui-ci)

0
Aryeh Leib Taurog

Vous pouvez convertir le clone superficiel existant en un clone complet. Pour ce faire, exécutez git fetch --unshallow (disponible depuis la version 1.8.3 de Git) au cours de l’étape de l’installation.

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

Le drapeau --tags force de récupérer toutes les balises même si elles n'appartiennent pas à la branche extraite. Cela est nécessaire si votre construction dépend également des balises d'autres branches.

0
Florian Dreier