我已经创建了一些脚本来检查AWS ECR中是否有更新版本的镜像,如果它确实拉取了它,并删除了以前的镜像。
我已经创建了一个azure-pipeline.yml
脚本,在将新版本推送到我的仓库后运行。
在最后一步,我正在对另一台机器执行SSH命令,并执行上面提到的脚本。
## Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- master
resources:
- repo: self
variables:
- group: AWS_ECR
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build
displayName: Build
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 0
- task: gitversion/setup@0
displayName: Install GitVersion
inputs:
versionSpec: "5.10.x"
- task: gitversion/execute@0
displayName: Determine Version
inputs:
useConfigFile: true
configFilePath: ./GitVersion.yml
- script: |
aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com
displayName: 'Login to AWS'
env:
AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
- task: Docker@2
displayName: Build an image
inputs:
repository: $(BACKEND_REPOSITORY_URI)
command: buildAndPush
dockerfile: '$(Build.SourcesDirectory)/Dockerfile'
tags: |
$(GitVersion.FullSemVer)
latest
- task: SSH@0
displayName: 'Run updateImage script'
inputs:
sshEndpoint: 'ssh'
runOptions: inline
inline: |
cd /home/ubuntu/composer
nohup ./updateImage.sh $(AWS_ACCOUNT_ID) $(AWS_REGION) $(BACKEND_REPOSITORY_NAME) &
continueOnError: true
我试着用nohup &
运行它,让它在后台运行,但由于某种原因,管道从脚本中获取输出。updateImage.sh
:
#!/bin/bash
# Check if required arguments are provided
if [ "$#" -lt 3 ]; then
echo "Usage: $0 <AWS_ACCOUNT_ID> <AWS_REGION> <REPOSITORY_NAME>"
exit 1
fi
# Assign script arguments to variables
AWS_ACCOUNT_ID=$1
AWS_REGION=$2
REPOSITORY_NAME=$3
# Navigate to the directory
cd /home/ubuntu/HighScaleComposer
# Pull the newest image
docker pull "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${REPOSITORY_NAME}:latest"
# Run Docker Compose with the newest image
docker compose -f docker-compose.yaml up -d && sleep 5
# Remove other images (excluding latest)
docker images --format "{{.ID}} {{.Repository}}:{{.Tag}}" | grep "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${REPOSITORY_NAME}" | grep -v latest | awk '{print $1}' | xargs -I {} docker rmi {}
这是来自失败的管道的日志:
542bd72cf3c7: Verifying Checksum
542bd72cf3c7: Download complete
542bd72cf3c7: Pull complete
b57d17fdbf95: Pull complete
Digest: sha256:57abc895af88a97389baf56321ff17c9ef7b55e605aceed002e2c3be87ad019e
Status: Downloaded newer image for
***.dkr.ecr.eu-central-1.amazonaws.com/highscale_backend:latest
***.dkr.ecr.eu-central-1.amazonaws.com/highscale_backend:latest
##[error] Container frontend Running
##[error] Container mysql_container Running
##[error] Container backend Recreate
##[error] Container backend Recreated
##[error] Container backend Starting
##[error] Container backend Started
Untagged:
***.dkr.ecr.eu-central-1.amazonaws.com/highscale_backend@sha256:cd50c51220508921088e2871c76b64464ef4a607c7457026439486e20ff255d1
Deleted: sha256:39b2f42e37ac24ecb06a637b346a6cb6dd3ef8eacb12dd2731fe58476c2573c1
Deleted: sha256:ffc8e4f5ddfb398588b2a792ce93853d15b877a588ae179e1d5c44c9906b49f3
Deleted: sha256:a6318b95525b5d1ed1ec6a61ab9ec1b48d236d7ef3e26a2bf5542e4160c01f25
Finishing: Run updateImage script
这是从机器执行脚本的输出:
ubuntu@ip-172-31-9-59:~/composer$ ./updateImage.sh 274129698771 eu-central-1 backend
latest: Pulling from backend
96526aa774ef: Already exists
872bc298c5d2: Already exists
2a645fa80061: Pull complete
6dd5299324c9: Pull complete
Digest: sha256:cc5331ad95b28bbcb72de4e0519c24b2e5537d174a48f7304c60e355c8ca74e4
Status: Downloaded newer image for *.dkr.ecr.eu-central-1.amazonaws.com/backend:latest
*.dkr.ecr.eu-central-1.amazonaws.com/_backend:latest
[+] Running 3/3
✔ Container frontend Running 0.0s
✔ Container mysql_container Running 0.0s
✔ Container backend Started 10.6s
Untagged: *.dkr.ecr.eu-central-1.amazonaws.com/backend@sha256:e12d269915ec79709e219c4bc9d3c83e64cccf00bce9833124f607a7915ff80a
Deleted: sha256:c09bedd861bcd75329a6dc42b13e39ff0966aeadac1c95647e9f40af99bc708d
Deleted: sha256:a7e3e4a081b86994a08d544dc404dc66e6f1abcf6882b36d92c4e32f71c01ad4
Deleted: sha256:32815dad1d9b147e30fe198808ebcc546b380737d02aaf7693cb532a681f42e5
我猜是找到了那个error
字,这让我的管道失败了,我该怎么处理?
1条答案
按热度按时间mcdcgff01#
您可以尝试使用**
gnome-terminal
**命令在Bash中打开一个新的终端会话来运行脚本。举例来说:
此命令末尾的“
exec bash
”将在完成命令后保持终端会话打开。如果你不需要它,你可以从命令中删除它。