Как уже упоминалось, в принципе невозможно обновить version-label
в Elastic Beanstalk.
Но мы нашли решение, которое нас устроило. Мы создали отдельный этап в CodePipeline с действием Lambda. Пользовательский параметр — #{source_variables.CommitMessage}
, а артефакт ввода — build_output
. В лямбда-функции входящее событие считывается для сообщения фиксации
def lambda_handler(event, context):
commit_message = event['CodePipeline.job']['data']['actionConfiguration']['configuration']['UserParameters']
На следующем шаге считываем версию с package.json
с build_output
на s3 ведро
# Read out data from package.json on s3 zip object
with tempfile.TemporaryFile() as f:
s3_resource.meta.client.download_fileobj(s3_bucket_name, s3_object_key, f)
archive = zipfile.ZipFile(f)
package_json = archive.open('package.json')
data = package_json.read()
json_data = json.loads(data)
application_version = json_data['version']
Теперь функция может обновлять описание версии приложения из среды эластичного beanstalk.
# Read out version-label from environemt
environment = eb_client.describe_environments(ApplicationName=application_name)
version_label = environment['Environments'][0]['VersionLabel']
description = 'Version: {} - Commit Message: {}'.format(application_version, commit_message)
# Write new Description to given elastic Beanstalk Application version
eb_response = eb_client.update_application_version(
ApplicationName=application_name,
VersionLabel=version_label,
Description=description
)
Теперь мы можем ссылаться на версии наших приложений на версию и коммиты. Пожалуйста, имейте в виду, что это всего лишь фрагменты кода, а не вся логика.
person
thorstenleidl
schedule
03.08.2021