簡體   English   中英

如何將變量(環境屬性)從 CodeBuild 傳遞到 CodePipeline 中的 Beanstalk 應用程序?

[英]How to pass variable (environment property) from CodeBuild to Beanstalk app in CodePipeline?

我有一個簡單的 CodePipeline,它包含三個階段 - 源代碼簽出、CodeBuild 使用buildspec.yml構建 docker 映像並生成Dockerrun.json工件,然后部署到 Beanstalk。

現在,我希望在 docker 中運行的應用程序在構建期間讀取 CodeBuild 階段設置的變量(環境屬性)——一個構建號。 我怎樣才能做到這一點?

我已經在pre_build:commandsbuildspec.yml中設置了APPLICATION_BUILDNUMBER變量,並將其列在exported-variables下。 然后它出現在 AWS 控制台中 CodeBuild Build status下 Environment Variables 選項卡下Exported environment variables with desired value 下。

現在我如何在 Beanstalk 的 docker 中運行的應用程序中讀取它,這是一個 Spring 引導應用程序 (JAR)? 當我在 Beanstalk > 配置 > 軟件 > 環境屬性中手動設置變量APPLICATION_BUILDNUMBER時,我可以輕松閱讀它。 但我不知道,如何從 CodeBuild 傳遞它。

快速查看 Elastic Beanstalk 操作1的配置屬性,它無法從外部源獲取環境屬性。

解決方法可以是:

一個。 從您的 CodeBuild 操作中設置 SSM 參數存儲變量,然后

灣。 讀取 Elastic Beanstalk 環境“掛鈎”中的 SSM 參數值並導出到環境。

對於:從 CodeBuild 構建規范運行此命令:

$ aws ssm put-parameter --name "parameter-name" --type String --value "parameter-value"

對於 b:

您可以在 /opt/elasticbeanstalk/hooks/appdeploy/pre/ 中部署 hooks 文件。 通過 ebextension 'files' 構造2創建掛鈎腳本。 從 SSM 或 Secrets Manager 獲取密鑰並將密鑰導出到系統的最小掛鈎腳本如下所示:

#!/usr/bin/env bash
set -e

export MySecret=$(aws ssm get-parameters ---blah --blah......... )

不用說 CodeBuild 服務角色和 EC2 實例角色(與 EB 一起使用)需要具有所需的權限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:PutParameter",
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:*",
                "arn:aws:secretsmanager:*:*:*",
                "arn:aws:kms:*:*:*"
            ]
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM