使用Bitbucket管道将您从管道中获得的构建过程推送到我们的远程计算机。
这是bitbucket-pipelines.yml
文件的摘录
- 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'
连接本身可以正常工作,并且在远程连接到服务器后它确实可以正确运行命令...
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.
我尝试从计算机上的目录在本地运行相同的命令
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}'
但是它只是复制遥控器上的主目录。
在我看来,它看起来是在寻找服务器上的源目录,而不是从bitbucket(或我的本地计算机上带有pwd
的文件)中寻找docker容器。
如果我尝试在不使用''
的情况下运行命令,则该命令将失败,因为默认情况下它使用的是端口22。我还尝试将命令偏移到bash脚本中,并使用plugin可接受的模式MODE: 'Script'
,但是我无法在sh
文件中使用我的环境变量。
答案 0 :(得分:0)
如果您要做的就是将文件从管道复制到生产服务器,则应该使用rsync-deploy管道,而不是ssh运行。您的管道配置将非常类似于以下内容:
'keep_alive' => true,
'connection_timeout' => 5000,
'trace' => true,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
请确保在管道中正确配置SSH密钥(这是我们的文档,用于配置SSH密钥https://confluence.atlassian.com/bitbucket/use-ssh-keys-in-bitbucket-pipelines-847452940.html的链接)
答案 1 :(得分:0)
我找到了另一种解决方法,而不需要插件,而是运行了rsync作为脚本步骤
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
似乎-e none
是一个重要的补充,就像在Atlassian图像中加载一样,否则找不到rsync
函数。我在Atlassian社区的this帖子中找到了此信息。
答案 2 :(得分:0)
这对我来说似乎很好
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'
注意:避免在管道脚本中使用 sudo cmd