【问题标题】:How to fetch AWS CodeDeploy logs and show them in a BitBucket pipeline如何获取 AWS CodeDeploy 日志并在 BitBucket 管道中显示它们
【发布时间】:2020-04-07 01:22:36
【问题描述】:

我想在部署期间脚本失败时从我的 Amazon EC2 实例中获取 CodeDeploy 日志,然后在 BitBucket 管道中显示日志。

我该怎么做?
是否有任何 API 可用于从 CodeDeploy 获取日志?

【问题讨论】:

    标签: amazon-web-services logging aws-code-deploy bitbucket-pipelines


    【解决方案1】:

    我不确定 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/

    【讨论】:

      【解决方案2】:

      虽然我不知道有任何 API 可以完成这项工作,但我有一个简单的解决方法可以完成这项工作 - 这包括将默认代码部署日志文件上传到 S3 并从那里读取。

      1. 在 EC2 实例上,AWS Code Deploy 的默认日志文件存储在此处:/var/log/aws/codedeploy-agent/codedeploy-agent.log

      2. 在 EC2 实例上安装 aws-cli。[1]

      3. 编写一个简单的 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

      4. 假设上面步骤中创建的脚本保存在这里:/opt/upload-log-file.sh。确保脚本具有代码部署的读取权限,以便能够将其上传到 S3。这可以通过运行命令来确保:

        chmod +r /opt/upload-log-file.sh

      5. appspec.yml 定义了部署的所有步骤。在最后定义的步骤(通常是“ValidateService”步骤)的脚本中添加以下行以执行 upload-log-file.sh 脚本:

        /opt/upload-log-file.sh

      6. 在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/

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多