【发布时间】:2020-04-07 01:22:36
【问题描述】:
我想在部署期间脚本失败时从我的 Amazon EC2 实例中获取 CodeDeploy 日志,然后在 BitBucket 管道中显示日志。
我该怎么做?
是否有任何 API 可用于从 CodeDeploy 获取日志?
【问题讨论】:
标签: amazon-web-services logging aws-code-deploy bitbucket-pipelines
我想在部署期间脚本失败时从我的 Amazon EC2 实例中获取 CodeDeploy 日志,然后在 BitBucket 管道中显示日志。
我该怎么做?
是否有任何 API 可用于从 CodeDeploy 获取日志?
【问题讨论】:
标签: amazon-web-services logging aws-code-deploy bitbucket-pipelines
我不确定 BitBucket,但在 AWS 上,您可以使用 CloudWatch Logs 代理 [1] 将日志从 CodeDeploy 代理推送到 CloudWatch Logs。进入 CloudWatch Logs 后,您将创建一个指标过滤器以在日志条目中出现某些特定文本时发出警报 [2]。
CodeDeploy 代理日志文件位置为:
LINUX
*** /opt/codedeploy-agent/deployment-root/deployment-group-ID/deployment-ID/logs/scripts.log
*** /var/log/aws/codedeploy-agent/codedeploy-agent.log
*** /tmp/codedeploy-agent.update.log
WINDOWS
*** C:\ProgramData\Amazon\CodeDeploy\log\codedeploy-agent-log.txt
*** C:\ProgramData\Amazon\CodeDeploy\deployment-group-ID\deployment-ID\logs\scripts.log
*** C:\ProgramData\Amazon\CodeDeployUpdater\log\codedeploy-agent.updater.log
参考资料:
[1] 快速入门:让运行 Windows Server 2016 的 Amazon EC2 实例能够使用 CloudWatch Logs 代理将日志发送到 CloudWatch Logs - https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartWindows2016.html
[2]https://theithollow.com/2017/12/11/use-amazon-cloudwatch-logs-metric-filters-send-alerts/
【讨论】:
虽然我不知道有任何 API 可以完成这项工作,但我有一个简单的解决方法可以完成这项工作 - 这包括将默认代码部署日志文件上传到 S3 并从那里读取。
在 EC2 实例上,AWS Code Deploy 的默认日志文件存储在此处:/var/log/aws/codedeploy-agent/codedeploy-agent.log
在 EC2 实例上安装 aws-cli。[1]
编写一个简单的 shell 脚本,将日志文件上传到 S3 存储桶。为方便起见,您可以使用用于将代码从 bitbucket 上传到 EC2 实例的相同 S3 存储桶。但是,请确保 EC2 实例有足够的权限将文件上传到 S3 存储桶。 [2]
#!/bin/bash
aws s3 cp /var/log/aws/codedeploy-agent/codedeploy-agent.log s3://S3_BUCKET_NAME/codedeploy-agent.log
假设上面步骤中创建的脚本保存在这里:/opt/upload-log-file.sh。确保脚本具有代码部署的读取权限,以便能够将其上传到 S3。这可以通过运行命令来确保:
chmod +r /opt/upload-log-file.sh
appspec.yml 定义了部署的所有步骤。在最后定义的步骤(通常是“ValidateService”步骤)的脚本中添加以下行以执行 upload-log-file.sh 脚本:
/opt/upload-log-file.sh
在bitbucket-pipelines.yml文件中,添加如下步骤,读取上传的日志文件内容。注意这里使用的变量应该在bitbucket用户定义变量中声明。 [3]
apt-get update
apt-get install -y awscli
export aws_access_key_id=$AWS_ACCESS_KEY_ID; export aws_secret_access_key=$AWS_SECRET_ACCESS_KEY; aws s3 cp s3://$S3_BUCKET_NAME/codedeploy-agent.log .
tail -100 codedeploy-agent.log
下次运行 bitbucket 管道时,您将能够在管道步骤中看到日志文件的最后 100 行。
参考资料:
[1] 安装 AWS CLI - https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
[2] 从 EC2 访问 AWS S3 - https://aws.amazon.com/premiumsupport/knowledge-center/ec2-instance-access-s3-bucket/
[3] Bitbucket 变量和秘密 - https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/
【讨论】: