У меня есть настроенный конвейер Bitbucket, который выглядит следующим образом (предыдущие шаги, связанные с созданием и отправкой образа докера, опущены, но работают):
- step:
name: Deploy to EC2
script:
- |
ssh -i ${EC2_KEY_PEM} ${EC2_USER}@${EC2_HOST} <<'EOF'
docker ps -q | grep -q . && docker stop $(docker ps -q)
echo ${DOCKER_PASSWORD} | docker login --username ${DOCKER_USERNAME} --password-stdin
docker pull ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
docker run -d --name my_container_name ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
EOF
services:
- docker
где ${EC2_KEY_PEM}
— переменная репо, содержащая исходный файл .pem
.
Мой конвейер Bitbucket продолжает давать сбой из-за следующей ошибки:
<1s
+ ssh -i ${EC2_KEY_PEM} ${EC2_USER}@${EC2_HOST} <<'EOF'
docker ps -q | grep -q . && docker stop $(docker ps -q)
echo ${DOCKER_PASSWORD} | docker login --username ${DOCKER_USERNAME} --password-stdin
docker pull ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
docker run -d --name my_container_name ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
EOF
Warning: Identity file @ not accessible: No such file or directory.
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
(Я пробовал использовать <<EOF
вместо <<'EOF'
)
Я также попробовал следующее для определения закрытого ssh-ключа следующим образом:
- echo ${EC2_KEY_BASE64} | base64 -d > ec2-key.pem
- chmod 600 ec2-key.pem
- |
ssh -i ec2-key.pem ${EC2_USER}@${EC2_HOST} <<'EOF'
где ${EC2_KEY_BASE64}
преобразуется из .pem
в строку base64
. Одна и та же ошибка во всех случаях.
Проблема заключалась в расположении переменной ${EC2_KEY_BASE64}
. Bitbucket имеет переменные репозитория и переменные развертывания. Что не показано в моем bitbucket-pipelines.yml
, так это то, что я отметил предыдущий шаг как deployment: Production
, предполагая, что он перейдет к следующему шагу.
Это не. Другими словами, команда echo ${EC2_KEY_BASE64} | base64 -d > ec2-key.pem
создала пустой ec2-key.pem
файл, что привело к последующему сбою.
Ключевые выводы:
deployment
(например, Production
) можно использовать только за один шаг.Production
на определенном этапе вашего bitbucket-pipelines.yml
, они не будут доступны ни на каком другом этапе.