Utilisation de pipelines bitbucket pour pousser vers notre télécommande à partir du processus de construction que vous obtenez du pipeline.
Ceci est un extrait du fichier bitbucket-pipelines.yml
ssh -A -tt -i /root/.ssh/pipelines_id -o StrictHostKeyChecking=no -p 22007 {USER}@{HOST} 'rsync -zrSlh -e "ssh -p 22007" --stats --max-delete=0 "$PWD" {USER}@{HOST}:/home/{USER}'
La connexion elle-même fonctionne, et elle exécute la commande correctement une fois qu'elle est distante sur le serveur ...
INFO: Executing the pipe... INFO: Using default ssh key INFO: Executing command on {HOST} ssh -A -tt -i /root/.ssh/pipelines_id -o StrictHostKeyChecking=no -p 22007 {USER}@{HOST} 'rsync -zrSlh -e "ssh -p 22007" --stats --max-delete=0 /opt/atlassian/pipelines/agent/build/ {USER}@{HOST}:home/{USER}' bash: rsync -zrSlh -e "ssh -p 22007" --stats --max-delete=0 /opt/atlassian/pipelines/agent/build/ {USER}@{HOST}:home/{USER}: No such file or directory Connection to {HOST} closed.
J'ai essayé pour exécuter la même commande localement à partir du répertoire de ma machine
- pipe: atlassian/ssh-run:0.2.2 variables: SSH_USER: $PRODUCTION_USER SERVER: $PRODUCTION_SERVER COMMAND: '''rsync -zrSlh -e "ssh -p 22007" --stats --max-delete=0 $BITBUCKET_CLONE_DIR/ $PRODUCTION_USER@$PRODUCTION_SERVER:home/$PRODUCTION_USER''' PORT: '22007'
mais cela ne fait que dupliquer le répertoire personnel de la télécommande.
Cela me ressemble il recherche le répertoire source sur le serveur et ne regarde pas le conteneur docker de bitbucket (ou les fichiers sur ma machine locale avec pwd
).
Si j'essaye d'exécuter le commande sans le ''
alors il échoue car il utilise le port 22 par défaut. J'ai également essayé de décaler la commande dans un script bash et d'utiliser MODE: 'Script'
qui est un modèle acceptable pour le plugin , mais je ne peux pas utiliser mes variables d'environnement dans le fichier sh
.
3 Réponses :
Si tout ce que vous ne voulez pas faire est de copier les fichiers du pipeline vers le serveur de production, vous devriez le rsync-deploy , au lieu du ssh-run. Votre configuration de canal ressemblera à peu près à ce qui suit:
script: - pipe: atlassian/rsync-deploy:0.3.2 variables: USER: $PRODUCTION_USER SERVER: $PRODUCTION_USER REMOTE_PATH: 'home/$PRODUCTION_USER' LOCAL_PATH: 'build' SSH_PORT: '22007'
Assurez-vous de configurer correctement vos clés SSH dans les pipelines (voici un lien vers nos documents pour configurer les clés SSH https://confluence.atlassian.com/bitbucket/use-ssh -keys-in-bitbucket-pipelines-847452940.html )
Salut Alexander, merci pour le commentaire. J'utilisais rsync-deploy
avant, mais il a défini --delete-after
, ce qui n'est pas bon pour nous car nous ne voulons pas tout supprimer sur le serveur après la synchronisation. Cela a déjà été mentionné here , mais la solution pour forcer le pipeline à échouer n'était pas appropriée. Vous aviez mentionné que vous envisageriez si --delete-after
devrait être facultatif, et je pense que cela devrait vraiment être [1/2]
car nous avons besoin de synchroniser les fichiers avec le répertoire personnel ainsi que le répertoire www
, donc --delete-after
supprime tous les répertoires supplémentaires et les fichiers dot qui existent dans la maison annuaire (ce qui briserait évidemment les sites Web vers lesquels nous poussons). [2/2]
J'ai trouvé un autre moyen de contourner cela au lieu d'avoir besoin d'un plugin, à la place j'exécute une rsync comme action de script
image: atlassian/default-image:latest - rsync -rltDvzCh --max-delete=0 --stats --exclude-from=excludes -e 'ssh -e none -p 22007' $BITBUCKET_CLONE_DIR/ $PRODUCTION_USER@$PRODUCTION_SERVER:/home/$PRODUCTION_USER
Il semble que -e none code> est un ajout important, tout comme le chargement dans l'image atlassian, car il ne parvient pas à trouver la fonction
rsync
, sinon. J'ai trouvé ces informations sur ce message sur la communauté Atlassian.
Cela semble fonctionner assez bien pour moi
image: node:10.15.3 pipelines: default: - step: name: <project-path> script: - apt-get update && apt-get install -y rsync - ssh-keyscan -H $SSH_HOST >> ~/.ssh/known_hosts - cd $BITBUCKET_CLONE_DIR - rsync -r -v -e ssh . $SSH_USER@$SSH_HOST:/<project-path> - ssh $SSH_USER@$SSH_HOST 'cd <project-path> && npm install' - ssh $SSH_USER@$SSH_HOST 'pm2 restart 0'
Remarque: évitez d'utiliser sudo cmd dans les scripts de pipeline