J'écris un script pour déployer facilement une application. Le code de l'application est stocké dans un référentiel privé BitBucket.
J'aimerais pouvoir télécharger un fichier Zip du commit. J'ai essayé de m'authentifier avec le code suivant:
https://user:[email protected]/user/repo/get/commit.Zip
Cependant, au lieu d’accomplir cette tâche, il redirige vers la page de connexion de BitBucket.
Personnellement, je ne voulais pas mettre mon mot de passe dans mon script pour accomplir cela. L'astuce consistait donc à exécuter la commande suivante, après avoir ajouté votre clé publique à votre compte bitbucket:
git archive --remote=ssh://[email protected]/your_bitbucket_username/your_repository.git --format=Zip --output="name_of_your_desired_Zip_file.Zip" master
J'ai plusieurs clés sur mon système. Si vous en avez aussi, vous voudrez créer un fichier de configuration dans votre répertoire ~/.ssh qui spécifie l'utilisation d'une clé spécifique pour les connexions bitbucket.
~/.ssh/config
Host bitbucket.org
StrictHostKeyChecking no
IdentityFile /home/me/.ssh/my_private_key
Pour télécharger une copie compressée d'un référentiel BitBucket private à partir de la ligne de commande, utilisez les éléments suivants:
curl --digest --user <username>:<password> https://bitbucket.org/<username>/<repository>/get/<branchname>.Zip -o <branchname>.Zip
où <username>
et <password>
sont le nom et le mot de passe du compte Bitbucket, <repository>
est le nom du référentiel et <branchname>
est la branche. Si vous préférez télécharger un commit spécifique, utilisez le hachage SHA-1 du commit à la place de <branchname>.
.
L’indicateur --digest
sert à votre sécurité et est hautement recommandé. _ Il accomplit l’authentification de sorte que votre nom d’utilisateur et votre mot de passe soient non envoyés en clair. L’indicateur -o
envoie la sortie de la commande curl sur le disque sous forme de fichier, au lieu de la diffuser sur l’écran de votre terminal.
Remarque: Le schéma d'authentification de Bitbucket n'est pas compatible avec wget.
C'est pourquoi vous devez utiliser curl.
Pour public les référentiels Bitbucket, la commande est la suivante:
curl https://bitbucket.org/<username>/<repository>/get/<branchname>.Zip -o <branchname>.Zip
Ou bien, vous pouvez utiliser wget
pour les référentiels publics car aucune authentification n'est requise:
wget https://bitbucket.org/<username>/<repository>/get/<branchname>.Zip
En plus du format .Zip
, vous pouvez télécharger des référentiels dans les variantes .gz
et .bz2
. Remplacez simplement .Zip
dans le code ci-dessus par .gz
ou .bz2
pour télécharger le référentiel au format compressé de votre choix.
Le drapeau --digest est pour votre sécurité et est fortement recommandé. Il s'authentifie de sorte que votre nom d'utilisateur et votre mot de passe ne soient pas envoyés en clair.
Ce n'est pas vrai.
Bitbucket utilise exclusivement TLS, ce qui évite tout ce qui se passe en clair. En conséquence, Digest ne procure aucun avantage par rapport à l’authentification de base. En fait, étant donné que Digest est initié par le serveur, vous effectuez un aller-retour supplémentaire du serveur demandant le nonce fourni par le serveur.
Notre utilisation de Digest est redondante et obsolète depuis que nous avons cessé d'offrir un accès HTTP non crypté il y a plusieurs années. Elle a été conservée uniquement parce que des scripts basés sur curl exécutaient --digest
, comme suggéré par @GrowlTiger.
En fait, nous sommes sur le point de désactiver complètement Digest le 1er mai, après quoi curl --digest
cessera de fonctionner.
Plus d'informations peuvent être trouvées: https://blog.bitbucket.org/2015/04/03/fare-thee-well-digest-access-authentication/
Pour ceux qui veulent télécharger un seul fichier depuis un dépôt privé sur bitbucket, j'ai essayé ce qui précède, mais aucun n'a fonctionné. Enfin, je l'ai obtenu avec la commande ci-dessous:
wget --user=<user> --password=<password> https://bitbucket.org/<user>/<repo>/raw/master/<filename>
La réponse de GrowlTigers est excellente, il s’agit simplement d’une mise à jour: avec wget, elle semble fonctionner maintenant aussi:
wget --user=<username> --password='<password>' https://bitbucket.org/<user>/<repo>/get/<filename>.tar.gz
L'outil que vous utilisez prend-il en charge les informations d'identification d'authentification de base dans l'URL? Demande Curl avec l'authentification de résumé dans PHP pour le téléchargement du référentiel privé Bitbucket implique fortement que
curl --user user:pass https://bitbucket.org/user/repo/get/commit.Zip >commit.Zip
travaux.
J'ai trouvé que cela fonctionnait dans la nouvelle version de Bitbucket
repository_list=" a b c"
for repository in ${repository_list}
do
echo "Getting: ${repository}"
curl --user userid:password \
http://bitjira.xxx.com:7990/rest/api/latest/projects/WP/repos/${repository}/archive?format=Zip \
-o ${repository}.Zip
done