如何在AWS elasticbeanstalk中配置sonarqube 7.1

如何在AWS elasticbeanstalk中配置sonarqube 7.1,sonarqube,amazon-elastic-beanstalk,terraform,bitnami,sonarqube-ops,Sonarqube,Amazon Elastic Beanstalk,Terraform,Bitnami,Sonarqube Ops,我尝试了几种方法让SonarQu在我们的AWS环境中运行,都很成功。然而,SonarQube是不稳定的。每当Elastic beanstalk回收一个实例时,我的SonarQube环境就会消失 以下是我尝试过的: 尝试1:EC2实例。我使用bitnami ami imageId创建EC2实例:ami-0f9cf81913a6dce27 这似乎是一个非常简单的过程。但我更喜欢弹性beanstalk环境来管理我们的sonarQube EC2实例 尝试2:使用一个docker实例创建一个EB环境,使用

我尝试了几种方法让SonarQu在我们的AWS环境中运行,都很成功。然而,SonarQube是不稳定的。每当Elastic beanstalk回收一个实例时,我的SonarQube环境就会消失

以下是我尝试过的:

尝试1:EC2实例。我使用bitnami ami imageId创建EC2实例:ami-0f9cf81913a6dce27

这似乎是一个非常简单的过程。但我更喜欢弹性beanstalk环境来管理我们的sonarQube EC2实例

尝试2:使用一个docker实例创建一个EB环境,使用此docker文件:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "sonarqube:7.1"
  },
  "Ports": [{
    "ContainerPort": "9000"
  }]
}
这创造了电子商务环境。它创建一个RDS实例(使用mySql 5.x)来存储扫描数据(在一个名为ebdb的数据库中)。sonarQube服务器在本地为其搜索数据托管一个内部elasticsearch实例

然后,我必须添加一些环境变量来支持RDS实例(jdbc用户名、密码、url端点等)

然后我必须配置sonarQube安全端

未安装任何市场功能。所以我添加了SonarJava、Groovy和SonarJS

我添加了一个用于扫描的登录用户。一切都好

除此之外,Elastic Beanstalk偶尔会出现运行状况问题并删除当前实例,然后重新创建一个新实例

在这种情况下,所有的东西都仍然处于机智安全状态:用户、密码等,但市场功能消失了。因此,在我手动添加代码之前,代码扫描将失败

单实例docker容器的模式非常稀疏,我没有看到任何进一步定制docker文件的方法

尝试3:使用多实例docker容器。模式更健壮,也许我可以更明确地配置它。e、 g.您可以传递环境变量、mysql设置等

我无法让它工作。我确实了解到需要将内存设置在2GB以上,才能启动elasticsearch。但我没能让sonarQube环境出现

我可能稍后再讨论这个问题

尝试4:在elastic beanstalk中使用AMI(使用terraform aws提供商)

main.tf


这确实创造了一切。但是,EC2实例响应太慢,EB变为灰色状态。即使SonarQube已启动并运行,EB也不知道。因此,我将其注释掉,并一次性手动修改图像id

wait\u for\u ready\u timeout
确实有助于实现这一点,因为这可以防止terraform超时。e、 g.它在22.5分钟内完成,而不是在20分钟内硬停

在本例中,它使用本地mysql数据库(没有RDS实例)创建SonarQube,而elasticsearch也是本地的

除了Groovy之外,SonarQube的市场特性也包括在内。我补充道

不过,问题和以前一样。当EB删除一个实例并重新创建它时,sonarQube环境将被清除。这一次,凭证、市场功能和所有内容都将受到影响


有人遇到这个问题并解决了吗?

我使用ECS(Fargate)而不是弹性Beanstalk容器解决了这个问题

步骤:

  • 在AWS中为sonar创建RDS mysql实例

  • 为此实例打开mysql外壳,并将其配置为sonar,请参见:

  • 使用您关心的插件创建dockerfile,例如:

  • 我公开了9092,以防我想注释掉mysql连接,并在某个时候使用内部h2数据库进行本地测试

  • 验证docker映像是否在本地运行
  • eval$(docker机器环境)

    docker build-t声纳。

    docker run-it-d-rm-name sonar-p 9000:9000-p 9092:9092 sonar:latest

    echo$DOCKER\u主机

    打开此ip地址(端口9000)的浏览器。e、 g.
    http://192.x.x.x:9000

  • 创建一个名为sonar的新ECS存储库来存储docker映像

    AWS界面实际上告诉您如何发布docker图像,因此这应该是不言而喻的

  • 标记docker文件并将其推送到sonar存储库

  • $(aws ecr get登录--不包括电子邮件--地区[YOUR-aws-region])

    docker-tag-sonar:latest[YOUR-ECS-docker-IMAGE-URI]/sonar:latest

    docker推送[YOUR-ECS-docker-IMAGE-URI]/sonar:latest

  • 创建一个新的远门集群,称为声纳

  • 创建新的任务定义

    对于您的容器,请使用ECS docker映像URI。我给了我6 GB内存和2个cpu,有1024个cpu单元。这里我暴露了端口9000和9092。我也在Dockerfile中添加了环境变量

  • 创建ECS服务,并包含任务。运行它,验证cloudwatch日志。点击端口9000上的公共端点,完成

  • 我大体上借鉴了这一点:


    我希望这对其他人有所帮助。

    获取插件的路径不再有效。有人知道从哪里获得插件吗?还有,你设置了哪些环境变量(除了数据库参数?)不久前这样做了,vpc因此被删除。看起来只有3个环境变量被设置到fargate环境中。然而,我可能会装载一个包含机密文件的卷,所以它们不容易访问。当我这么做的时候,我对fargate还是一个新手,但是如果没有其他人这么做的话,我会尝试花费一些时间来使用CDK或terraform进行安装,并将其导入github。
    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"
          } 
    }
    
      setting {
        namespace = "aws:autoscaling:launchconfiguration"
        name      = "imageId"
        value     = "ami-0f9cf81913a6dce27"
      }
    
        FROM sonarqube:latest
        
        ENV SONARQUBE_JDBC_USERNAME=[YOUR-USERNAME] \   
            SONARQUBE_JDBC_PASSWORD=[YOUR-PASSWORD] \    
            SONARQUBE_JDBC_URL=jdbc:mysql://[YOUR-RDS-ENDPOINT]:3306/sonar?useSSL=false&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
        
        RUN wget "https://sonarsource.bintray.com/Distribution/sonar-java-plugin/sonar-java-plugin-5.7.0.15470.jar" \
            && wget "https://sonarsource.bintray.com/Distribution/sonar-javascript-plugin/sonar-javascript-plugin-4.2.1.6529.jar" \
            && wget "https://sonarsource.bintray.com/Distribution/sonar-groovy-plugin/sonar-groovy-plugin-1.4.jar" \
            && mv *.jar $SONARQUBE_HOME/extensions/plugins \
            && ls -lah $SONARQUBE_HOME/extensions/plugins
        
        EXPOSE 9000
        
        EXPOSE 9092