Tôi hiện đang làm việc trên một tập lệnh shell được sử dụng để xây dựng hình ảnh docker và khởi động lại các container đang chạy trên máy chủ từ xa. dưới đây là phiên bản rút gọn của mã.
#!/bin/bash -xe
# usages: ./deploy.sh [PROJECT_REPO] [DOCKER_IMAGE] [TARGET_HOST] [KEYPAIR_PATH]
PROJECT_REPO=$1
DOCKER_IMAGE=$2
TARGET_HOST=$3
KEYPAIR_PATH=$4
PROJECT_DIR=$(echo $PROJECT_REPO | cut -d'/' -f 2 | cut -d '.' -f 1)
CONTAINER=$PROJECT_DIR
USER="ubuntu"
git clone $PROJECT_REPO
cd $PROJECT_DIR
if docker build -t $DOCKER_IMAGE .; then
docker push $DOCKER_IMAGE
if ssh -o StrictHostKeyChecking=no -i $KEYPAIR_PATH $USER@$TARGET_HOST -yes DOCKER_IMAGE=$DOCKER_IMAGE CONTAINER=$CONTAINER '\
docker pull $DOCKER_IMAGE && \
docker stop $CONTAINER
docker rm $CONTAINER
docker run -d --name=$CONTAINER $DOCKER_IMAGE'; then
echo "success"
else
echo "Failure"
exit 1
fi
else
echo "Error during building image"
exit 1
fi
Tôi đang cố gắng làm cho tập lệnh này được khái quát hóa để nó có thể được sử dụng với các dự án khác nhau bằng cách chạy tập lệnh với các chi tiết của một dự án (URL kho lưu trữ, hình ảnh docker), nhưng khi tôi cố chạy tập lệnh thì tôi gặp lỗi với docker các lệnh do các giá trị của các biến môi trường DOCKER_IMAGE
và CONTAINER
bị trống trên các máy chủ từ xa.
ssh -yes
tương đươngssh -y -e -s
và không liên quan gì đến từ "có". Nhận xét này dành cho những người dùng (như tôi) tự hỏi "có" trong bối cảnh là gìssh
.