Я попробовал несколько способов запустить sonarQube в нашей среде AWS, все успешно.Однако SonarQube нестабилен.Всякий раз, когда Elastic beanstalk перезапускает экземпляр, моя среда SonarQube стирается.
Вот что я пробовал:
Попытка 1: Экземпляр EC2.Я создаю экземпляр EC2 из bitnami ami imageId: ami-0f9cf81913a6dce27
Это казалось довольно простым процессом.Но я предпочитаю среду гибких beanstalk для управления нашими экземплярами sonarQube EC2.
Попытка 2: Создание среды EB с использованием одного экземпляра docker с помощью этого файла docker:
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "sonarqube:7.1"
},
"Ports": [{
"ContainerPort": "9000"
}]
}
Это создало среду EB.Он создает экземпляр RDS (с mySql 5.x) для хранения данных сканирования (в базе данных с именем ebdb).Сервер sonarQube локально размещает внутренний экземплярasticsearch для своих данных поиска.
Затем мне нужно добавить несколько переменных среды для поддержки экземпляра RDS (имя пользователя jdbc, пароль, конечная точка URL и т. Д.).
Затем мне нужно настроить сторону безопасности sonarQube.
Функции на рынке не установлены.Поэтому я добавляю SonarJava, Groovy и SonarJS.
Я добавляю пользователя для сканирования.Все хорошо.
За исключением случаев, когда у Elastic Beanstalk возникает проблема со здоровьем, он сбрасывает текущий экземпляр и воссоздает новый экземпляр.
В этом случае все по-прежнему в такте - безопасность: пользователи, пароли и т. Д. За исключением того, что функции рынка исчезли.Таким образом, сканирование кода не будет выполнено до тех пор, пока я не добавлю их обратно вручную.
Схема для контейнера Docker с одним экземпляром довольно скудна, я не видел никакого способа дальнейшей настройки с файлом Docker.
Попытка 3: Использовать Docker-контейнер с несколькими экземплярами.Схема более надежна, возможно, я смогу настроить sonarQube более явно.Например, вы можете передать переменные окружения, настройки MySQL и т. д.
Мне не удалось заставить это работать.Я узнал, что мне нужно установить объем памяти выше 2 ГБ, чтобы начать работать с Flexiblesearch.Но я не смог запустить среду sonarQube.
Я мог бы вернуться к этому позже.
Попытка 4: использовать AMI в эластичном beanstalk (с провайдером terraform aws)
main.tf
resource "aws_elastic_beanstalk_application" "sonarqube" {
name = "SonarQube"
description = "SonarQube for nano-services"
}
resource "aws_elastic_beanstalk_environment" "nonprod" {
name = "${var.application-name}"
application = "${aws_elastic_beanstalk_application.sonarqube.name}"
solution_stack_name = "64bit Amazon Linux 2018.03 v2.10.0 running Docker 17.12.1-ce"
wait_for_ready_timeout = "30m"
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "Timeout"
value = "PT1H"
}
setting {
namespace = "aws:elasticbeanstalk:environment"
name = "ServiceRole"
value = "aws-elasticbeanstalk-service-role"
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "DeploymentPolicy"
value = "Rolling"
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "BatchSizeType"
value = "Fixed"
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "BatchSize"
value = "1"
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "IgnoreHealthCheck"
value = "true"
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "EC2KeyName"
value = "web-aws-key"
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "IamInstanceProfile"
value = "arn:aws:iam::<redacted>:instance-profile/aws-elasticbeanstalk-ec2-role"
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "instanceType"
value = "t2.xlarge"
}
setting {
namespace = "aws:elb:listener:443"
name = "ListenerProtocol"
value = "SSL"
}
setting {
namespace = "aws:elb:listener:443"
name = "InstanceProtocol"
value = "SSL"
}
setting {
namespace = "aws:elb:listener:443"
name = "SSLCertificateId"
value = "arn:aws:acm:<redacted>"
}
setting {
namespace = "aws:elb:listener:443"
name = "ListenerEnabled"
value = "true"
}
}
Изначально я включил sonarQube AMI:
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "imageId"
value = "ami-0f9cf81913a6dce27"
}
Это создает все.Однако экземпляры EC2 реагируют слишком медленно, и EB переходит в статус Грея.Хотя SonarQube работает и работает, EB не знает об этом.Поэтому я закомментировал это и вручную изменил идентификатор изображения как одноразовый.
wait_for_ready_timeout
помогает в этом, поскольку это просто не позволяет терраформе истечь.Например, он завершается за 22,5 минуты вместо жесткого останова через 20 минут.
В этом случае он создает SonarQube с локальной базой данных mysql (без экземпляра RDS) с локальным / эластичным поиском.
Функции рынка SonarQube также включены, за исключением Groovy.Который я добавил.
Однако та же проблема, что и раньше.Когда EB отбрасывает экземпляр и создает его заново, среда sonarQube стирается.На этот раз учетные данные, функции рынка и все такое.
Кто-нибудь сталкивался с этой проблемой и понял ее?