kubernetes实践之三十: SonarQube和SonarQube Runner
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
此外,Sonar 的插件还可以对 Java 以外的其他编程语言(支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex等)提供支持,对国际化以及报告文档化也有良好的支持。可以说Sonar是目前最强大的代码质量管理工具之一。
SonarQube框架包含以下四个部分:
Project:是需要被分析的源码,如我们的app工程源码,SonarQube支持多种语言和多种工程结构.
SonarQube Scanner:是用于执行代码分析的工具,在Project的根目录下执行.
SonarQube支持多种工程构建方式的配置,也对应需要用不同的Scanner来执行分析过程:
- Ant
- Maven
- MSBuild(Microsoft Build Engine)
- Gradle
- Sonar Runner
SonarQube Server:显示分析结果的Web Server,在SonarQube Scanner第一次将一个工程的分析结果上报给SonarQube Server后,Server上会自动创建一个工程显示分析的结果,可以在Server上设置代码质量管理相关的各种配置,如设置代码检查规则(Rule)和质量门限(Quality Gate)等。
SonarQube Database: 支持MySql,Oracle等
二:安装与配置
1.相关信息
操作系统:Centos 7.0
软件版本:sonarqube-6.7.3.zipsonar-runner-dist-2.4.zip
2.前置条件
jdk1.8, mysql 5.6(必须是5.6以上版本)
3.解压缩sonarqube-6.7.3.zip sonar-runner-dist-2.4.zip 到/usr/local
unzipsonarqube-6.7.3.zip -d/usr/local
unzipsonar-runner-dist-2.4.zip -d/usr/local
4.环境变量设置
vi /etc/profile
点击(此处)折叠或打开
- JAVA_HOME=/usr/local/jdk1.8
- export SONAR_HOME=/usr/local/sonarqube-6.7.3
- export SONAR_RUNNER_HOME=/usr/local/sonar-runner-2.4
- PATH=$JAVA_HOME/bin:$SONAR_HOME/bin:$SONAR_RUNNER_HOME/bin:$PATH
- CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- export JAVA_HOME PATH CLASSPATH
source /etc/profile
5.配置sonar.properties(/usr/local/sonarqube-6.7.3/conf/)
点击(此处)折叠或打开
- # Property values can:
- # - reference an environment variable, for example sonar.jdbc.url= ${env:SONAR_JDBC_URL}
- # - be encrypted. See https://redirect.sonarsource.com/doc/settings-encryption.html
- #--------------------------------------------------------------------------------------------------
- # DATABASE
- #
- # IMPORTANT:
- # - The embedded H2 database is used by default. It is recommended for tests but not for
- # production use. Supported databases are MySQL, Oracle, PostgreSQL and Microsoft SQLServer.
- # - Changes to database connection URL (sonar.jdbc.url) can affect SonarSource licensed products.
- # User credentials.
- # Permissions to create tables, indices and triggers must be granted to JDBC user.
- # The schema must be created first.
- sonar.jdbc.username=root
- sonar.jdbc.password=password
- #----- Embedded Database (default)
- # H2 embedded database server listening port, defaults to 9092
- #sonar.embeddedDatabase.port=9092
- #----- MySQL 5.6 or greater
- # Only InnoDB storage engine is supported (not myISAM).
- # Only the bundled driver is supported. It can not be changed.
- sonar.jdbc.url=jdbc:mysql://112.74.53.213:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
- #----- Oracle 11g/12c
- # The Oracle JDBC driver must be copied into the directory extensions/jdbc-driver/oracle/.
- # Only the thin client is supported, and only the versions 11.2.x or 12.2.x must be used. See
- # https://jira.sonarsource.com/browse/SONAR-9758 for more details.
- # If you need to set the schema, please refer to http://jira.sonarsource.com/browse/SONAR-5000
- #sonar.jdbc.url=jdbc:oracle:thin:@localhost:1521/XE
- #----- PostgreSQL 8.x or greater
- # If you don't use the schema named "public", please refer to http://jira.sonarsource.com/browse/SONAR-5000
- #sonar.jdbc.url=jdbc:postgresql://localhost/sonar
- #----- Microsoft SQLServer 2014/2016 and SQL Azure
- # A database named sonar must exist and its collation must be case-sensitive (CS) and accent-sensitive (AS)
- # Use the following connection string if you want to use integrated security with Microsoft Sql Server
- # Do not set sonar.jdbc.username or sonar.jdbc.password property if you are using Integrated Security
- # For Integrated Security to work, you have to download the Microsoft SQL JDBC driver package from
- # https://www.microsoft.com/en-us/download/details.aspx?id=55539
- # and copy sqljdbc_auth.dll to your path. You have to copy the 32 bit or 64 bit version of the dll
- # depending upon the architecture of your server machine.
- #sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true
- # Use the following connection string if you want to use SQL Auth while connecting to MS Sql Server.
- # Set the sonar.jdbc.username and sonar.jdbc.password appropriately.
- #sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
- #----- Connection pool settings
- # The maximum number of active connections that can be allocated
- # at the same time, or negative for no limit.
- # The recommended value is 1.2 * max sizes of HTTP pools. For example if HTTP ports are
- # enabled with default sizes (50, see property sonar.web.http.maxThreads)
- # then sonar.jdbc.maxActive should be 1.2 * 50 = 60.
- #sonar.jdbc.maxActive=60
- # The maximum number of connections that can remain idle in the
- # pool, without extra ones being released, or negative for no limit.
- #sonar.jdbc.maxIdle=5
- # The minimum number of connections that can remain idle in the pool,
- # without extra ones being created, or zero to create none.
- #sonar.jdbc.minIdle=2
- # The maximum number of milliseconds that the pool will wait (when there
- # are no available connections) for a connection to be returned before
- # throwing an exception, or <= 0 to wait indefinitely.
- #sonar.jdbc.maxWait=5000
- #sonar.jdbc.minEvictableIdleTimeMillis=600000
- #sonar.jdbc.timeBetweenEvictionRunsMillis=30000
- #--------------------------------------------------------------------------------------------------
- # WEB SERVER
- # Web server is executed in a dedicated Java process. By default heap size is 512Mb.
- # Use the following property to customize JVM options.
- # Recommendations:
- #
- # The HotSpot Server VM is recommended. The property -server should be added if server mode
- # is not enabled by default on your environment:
- # http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
- #
- # Startup can be long if entropy source is short of entropy. Adding
- # -Djava.security.egd=file:/dev/./urandom is an option to resolve the problem.
- # See https://wiki.apache.org/tomcat/HowTo/FasterStartUp#Entropy_Source
- #
- sonar.web.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
- # Same as previous property, but allows to not repeat all other settings like -Xmx
- #sonar.web.javaAdditionalOpts=
- # Binding IP address. For servers with more than one IP address, this property specifies which
- # address will be used for listening on the specified ports.
- # By default, ports will be used on all IP addresses associated with the server.
- sonar.web.host=0.0.0.0
- # Web context. When set, it must start with forward slash (for example /sonarqube).
- # The default value is root context (empty value).
- #sonar.web.context=
- # TCP port for incoming HTTP connections. Default value is 9000.
- sonar.web.port=9000
- # The maximum number of connections that the server will accept and process at any given time.
- # When this number has been reached, the server will not accept any more connections until
- # the number of connections falls below this value. The operating system may still accept connections
- # based on the sonar.web.connections.acceptCount property. The default value is 50.
- #sonar.web.http.maxThreads=50
- # The minimum number of threads always kept running. The default value is 5.
- #sonar.web.http.minThreads=5
- # The maximum queue length for incoming connection requests when all possible request processing
- # threads are in use. Any requests received when the queue is full will be refused.
- # The default value is 25.
- #sonar.web.http.acceptCount=25
- # By default users are logged out and sessions closed when server is restarted.
- # If you prefer keeping user sessions open, a secret should be defined. Value is
- # HS256 key encoded with base64. It must be unique for each installation of SonarQube.
- # Example of command-line:
- # echo -n "type_what_you_want" | openssl dgst -sha256 -hmac "key" -binary | base64
- #sonar.auth.jwtBase64Hs256Secret=
- # The inactivity timeout duration of user sessions, in minutes. After the configured
- # period of time, the user is logged out.
- # The default value is set to 3 days (4320 minutes)
- # and cannot be greater than 3 months. Value must be strictly positive.
- #sonar.web.sessionTimeoutInMinutes=4320
- # A passcode can be defined to access some web services from monitoring
- # tools without having to use the credentials of a system administrator.
- # Check the Web API documentation to know which web services are supporting this authentication mode.
- # The passcode should be provided in HTTP requests with the header "X-Sonar-Passcode".
- # By default feature is disabled.
- #sonar.web.systemPasscode=
- #--------------------------------------------------------------------------------------------------
- # SSO AUTHENTICATION
- # Enable authentication using HTTP headers
- #sonar.web.sso.enable=false
- # Name of the header to get the user login.
- # Only alphanumeric, '.' and '@' characters are allowed
- #sonar.web.sso.loginHeader=X-Forwarded-Login
- # Name of the header to get the user name
- #sonar.web.sso.nameHeader=X-Forwarded-Name
- # Name of the header to get the user email (optional)
- #sonar.web.sso.emailHeader=X-Forwarded-Email
- # Name of the header to get the list of user groups, separated by comma (optional).
- # If the sonar.sso.groupsHeader is set, the user will belong to those groups if groups exist in SonarQube.
- # If none of the provided groups exists in SonarQube, the user will only belong to the default group.
- # Note that the default group will always be set.
- #sonar.web.sso.groupsHeader=X-Forwarded-Groups
- # Interval used to know when to refresh name, email and groups.
- # During this interval, if for instance the name of the user is changed in the header, it will only be updated after X minutes.
- #sonar.web.sso.refreshIntervalInMinutes=5
- #--------------------------------------------------------------------------------------------------
- # COMPUTE ENGINE
- # The Compute Engine is responsible for processing background tasks.
- # Compute Engine is executed in a dedicated Java process. Default heap size is 512Mb.
- # Use the following property to customize JVM options.
- # Recommendations:
- #
- # The HotSpot Server VM is recommended. The property -server should be added if server mode
- # is not enabled by default on your environment:
- # http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
- #
- #sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
- # Same as previous property, but allows to not repeat all other settings like -Xmx
- #sonar.ce.javaAdditionalOpts=
- #--------------------------------------------------------------------------------------------------
- # ELASTICSEARCH
- # Elasticsearch is used to facilitate fast and accurate information retrieval.
- # It is executed in a dedicated Java process. Default heap size is 512Mb.
- #
- # --------------------------------------------------
- # Word of caution for Linux users on 64bits systems
- # --------------------------------------------------
- # Please ensure Virtual Memory on your system is correctly configured for Elasticsearch to run properly
- # (see https://www.elastic.co/guide/en/elasticsearch/reference/5.5/vm-max-map-count.html for details).
- #
- # When SonarQube runs standalone, a warning such as the following may appear in logs/es.log:
- # "max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]"
- # When SonarQube runs as a cluster, however, Elasticsearch will refuse to start.
- #
- # JVM options of Elasticsearch process
- #sonar.search.javaOpts=-Xms512m \
- # -Xmx512m \
- # -XX:+HeapDumpOnOutOfMemoryError
- # Same as previous property, but allows to not repeat all other settings like -Xmx
- #sonar.search.javaAdditionalOpts=
- # Elasticsearch port. Default is 9001. Use 0 to get a free port.
- # As a security precaution, should be blocked by a firewall and not exposed to the Internet.
- #sonar.search.port=9001
- # Elasticsearch host. The search server will bind this address and the search client will connect to it.
- # Default is loopback address.
- # As a security precaution, should NOT be set to a publicly available address.
- #sonar.search.host=
- #--------------------------------------------------------------------------------------------------
- # UPDATE CENTER
- # Update Center requires an internet connection to request https://update.sonarsource.org
- # It is enabled by default.
- #sonar.updatecenter.activate=true
- # HTTP proxy (default none)
- #http.proxyHost=
- #http.proxyPort=
- # HTTPS proxy (defaults are values of http.proxyHost and http.proxyPort)
- #https.proxyHost=
- #https.proxyPort=
- # NT domain name if NTLM proxy is used
- #http.auth.ntlm.domain=
- # SOCKS proxy (default none)
- #socksProxyHost=
- #socksProxyPort=
- # Proxy authentication (used for HTTP, HTTPS and SOCKS proxies)
- #http.proxyUser=
- #http.proxyPassword=
- #--------------------------------------------------------------------------------------------------
- # LOGGING
- # SonarQube produces logs in 4 logs files located in the same directory (see property sonar.path.logs below),
- # one per process:
- # Main process (aka. App) logs in sonar.log
- # Web Server (aka. Web) logs in web.log
- # Compute Engine (aka. CE) logs in ce.log
- # Elasticsearch (aka. ES) logs in es.log
- #
- # All 4 files follow the same rolling policy (see sonar.log.rollingPolicy and sonar.log.maxFiles) but it applies
- # individually (eg. if sonar.log.maxFiles=4, there can be at most 4 of each files, ie. 16 files in total).
- #
- # All 4 files have logs in the same format:
- # 1 2 3 4 5 6
- # |-----------------| |---| |-|--------------------||------------------------------| |------------------------------------------------------------------------------------------------------------------------------|
- # 2016.11.16 16:47:00 INFO ce[AVht0dNXFcyiYejytc3m][o.s.s.c.t.CeWorkerCallableImpl] Executed task | project=org.sonarqube:example-java-maven | type=REPORT | id=AVht0dNXFcyiYejytc3m | submitter=admin | time=1699ms
- #
- # 1: timestamp. Format is YYYY.MM.DD HH:MM:SS
- # YYYY: year on 4 digits
- # MM: month on 2 digits
- # DD: day on 2 digits
- # HH: hour of day on 2 digits in 24 hours format
- # MM: minutes on 2 digits
- # SS: seconds on 2 digits
- # 2: log level.
- # Possible values (in order of descending criticality): ERROR, WARN, INFO, DEBUG and TRACE
- # 3: process identifier. Possible values: app (main), web (Web Server), ce (Compute Engine) and es (Elasticsearch)
- # 4: SQ thread identifier. Can be empty.
- # In the Web Server, if present, it will be the HTTP request ID.
- # In the Compute Engine, if present, it will be the task ID.
- # 5: logger name. Usually a class canonical name.
- # Package names are truncated to keep the whole field to 20 characters max
- # 6: log payload. Content of this field does not follow any specific format, can vary in length and include line returns.
- # Some logs, however, will follow the convention to provide data in payload in the format " | key=value"
- # Especially, log of profiled pieces of code will end with " | time=XXXXms".
- # Global level of logs (applies to all 4 processes).
- # Supported values are INFO (default), DEBUG and TRACE
- #sonar.log.level=INFO
- # Level of logs of each process can be controlled individually with their respective properties.
- # When specified, they overwrite the level defined at global level.
- # Supported values are INFO, DEBUG and TRACE
- #sonar.log.level.app=INFO
- #sonar.log.level.web=INFO
- #sonar.log.level.ce=INFO
- #sonar.log.level.es=INFO
- # Path to log files. Can be absolute or relative to installation directory.
- # Default is /logs
- #sonar.path.logs=logs
- # Rolling policy of log files
- # - based on time if value starts with "time:", for example by day ("time:yyyy-MM-dd")
- # or by month ("time:yyyy-MM")
- # - based on size if value starts with "size:", for example "size:10MB"
- # - disabled if value is "none". That needs logs to be managed by an external system like logrotate.
- #sonar.log.rollingPolicy=time:yyyy-MM-dd
- # Maximum number of files to keep if a rolling policy is enabled.
- # - maximum value is 20 on size rolling policy
- # - unlimited on time rolling policy. Set to zero to disable old file purging.
- #sonar.log.maxFiles=7
- # Access log is the list of all the HTTP requests received by server. If enabled, it is stored
- # in the file {sonar.path.logs}/access.log. This file follows the same rolling policy as other log file
- # (see sonar.log.rollingPolicy and sonar.log.maxFiles).
- #sonar.web.accessLogs.enable=true
- # Format of access log. It is ignored if sonar.web.accessLogs.enable=false. Possible values are:
- # - "common" is the Common Log Format, shortcut to: %h %l %u %user %date "%r" %s %b
- # - "combined" is another format widely recognized, shortcut to: %h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}"
- # - else a custom pattern. See http://logback.qos.ch/manual/layouts.html#AccessPatternLayout.
- # The login of authenticated user is not implemented with "%u" but with "%reqAttribute{LOGIN}" (since version 6.1).
- # The value displayed for anonymous users is "-".
- # The SonarQube's HTTP request ID can be added to the pattern with "%reqAttribute{ID}" (since version 6.2).
- # If SonarQube is behind a reverse proxy, then the following value allows to display the correct remote IP address:
- #sonar.web.accessLogs.pattern=%i{X-Forwarded-For} %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" "%reqAttribute{ID}"
- # Default value (which was "combined" before version 6.2) is equivalent to "combined + SQ HTTP request ID":
- #sonar.web.accessLogs.pattern=%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" "%reqAttribute{ID}"
- #--------------------------------------------------------------------------------------------------
- # OTHERS
- # Delay in seconds between processing of notification queue. Default is 60 seconds.
- #sonar.notifications.delay=60
- # Paths to persistent data files (embedded database and search index) and temporary files.
- # Can be absolute or relative to installation directory.
- # Defaults are respectively /data and /temp
- #sonar.path.data=data
- #sonar.path.temp=temp
- # Telemetry - Share anonymous SonarQube statistics
- # By sharing anonymous SonarQube statistics, you help us understand how SonarQube is used so we can improve the product to work even better for you.
- # We don't collect source code or IP addresses. And we don't share the data with anyone else.
- # To see an example of the data shared: login as a global administrator, call the WS api/system/info and check the Statistics field.
- #sonar.telemetry.enable=true
- #--------------------------------------------------------------------------------------------------
- # DEVELOPMENT - only for developers
- # The following properties MUST NOT be used in production environments.
- # Elasticsearch HTTP connector
- #sonar.search.httpPort=-1
6.配置sonar-runner.properties(/usr/local/sonar-runner-2.4/conf)
点击(此处)折叠或打开
- #Configure here general information about the environment, such as SonarQube DB details for example
- #No information about specific project should appear here
- #----- Default SonarQube server
- sonar.host.url=http://ip:9000
- #----- PostgreSQL
- #sonar.jdbc.url=jdbc:postgresql://localhost/sonar
- #----- MySQL
- sonar.jdbc.url=jdbc:mysql://mysqlip:3306/sonar?useUnicode=true&;characterEncoding=utf8
- #----- Oracle
- #sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE
- #----- Microsoft SQLServer
- #sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor
- #----- Global database settings
- sonar.jdbc.username=root
- sonar.jdbc.password=password
- #----- Default source code encoding
- #sonar.sourceEncoding=UTF-8
- #----- Security (when 'sonar.forceAuthentication' is set to 'true')
- sonar.login=admin
- sonar.password=password
7.创建sonar-project.properties(/usr/local/sonar-runner-2.4/conf)
点击(此处)折叠或打开
- # must be unique in a given SonarQube instance
- sonar.projectKey=donkey
- # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
- sonar.projectName=desktop
- sonar.projectVersion=0.0.1
- # Path is relative to the sonar-project.properties file. Replace "\" by "/
8.设置elasticsearch.yml(/usr/local/sonarqube-6.7.3/elasticsearch/config)
点击(此处)折叠或打开
- # ---------------------------------- Network -----------------------------------
- #
- # Set the bind address to a specific IP (IPv4 or IPv6):
- #
- network.host:ip
- #
- # Set a custom port for HTTP:
- #
- http.port: 9200
- #
- # For more information, consult the network module documentation.
三:启动
1.用root无法启动lSonarQube,需要另外新建普通用户来启动
useradd esadmin
chown -R esadmin.esadmin /usr/local/sonarqube-6.7.3
2.文件句柄配置
vim /etc/security/limits.conf
点击(此处)折叠或打开
- # End of file
- root soft nofile 65535
- root hard nofile 65535
- esadmin soft nofile 262144
- esadmin hard nofile 262144
- * soft nofile 65535
- * hard nofile 65535
3.vm.max_map_count 配置
vim /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
sysctl -p
4.启动
以之前创建的esadmin用户执行命令
./usr/local/sonarqube-6.7.3/bin/linux-x86-64/sonar.sh
监控 sonar.log es.log web.log
点击(此处)折叠或打开
- 018.05.04 16:00:17 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /usr/local/sonarqube-6.7.3/temp
- 2018.05.04 16:00:18 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
- 2018.05.04 16:00:19 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/usr/local/sonarqube-6.7.3/elasticsearch]: /usr/local/sonarqube-6.7.3/elasticsearch/bin/elasticsearch -Epath.conf=/usr/local/sonarqube-6.7.3/temp/conf/es
- 2018.05.04 16:00:19 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
- 2018.05.04 16:00:25 INFO app[][o.e.p.PluginsService] no modules loaded
- 2018.05.04 16:00:25 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
- 2018.05.04 16:01:44 INFO app[][o.s.a.SchedulerImpl] Process[es] is up
- 2018.05.04 16:01:44 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/usr/local/sonarqube-6.7.3]: /usr/local/jdk1.8/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/usr/local/sonarqube-6.7.3/temp -Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common
三:验证
1.sonarque UI界面
2.UI 界面汉化
下载sonar-l10n-zh-plugin-1.19.jar 到/usr/local/sonarqube-6.7.3/extensions/plugins
重启sonarqube
3.启动sonar-runner 对desktop项目代码进行分析, 分析结果通过UI界面可以看到。
./usr/local/sonar-runner-2.4/bin/sonar-runner -e -X
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2153847/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28624388/viewspace-2153847/
kubernetes实践之三十: SonarQube和SonarQube Runner相关推荐
- 微软云计算介绍与实践(实践之三十五)
创建SLA的仪表板 一旦SLA已经建立,小张可以创建仪表盘,这样可以显示SLA的状态.这将允许管理人员和支持人员查看他们的服务水平协议和状态. 0.在Operations Manager控制台中,单击 ...
- 《Kubernetes权威指南:从Docker到Kubernetes实践全接触》读书笔记
写在前面 之前简单的了解过,但是机器的原因,只有单机,因为安装Docker的原因,本机VM上的红帽节点起不来了.懂得不多,视频上都是多节点的,所以教学视屏上的所以Demo没法搞. 前些时间公司的一个用 ...
- 图灵访谈之三十二:我的精神家园——陈皓专访
图灵访谈之三十二:我的精神家园--陈皓(@左耳朵耗子)专访 推荐34收藏 芝兰生于深谷,不以无人而不芳 .君子修身养德,不以穷困而改志. "码农人物志"第二期码农代表:陈皓(@左耳 ...
- TOP100summit分享实录 | JFrog高欣:Kubernetes is hard!JFrog的Kubernetes实践 1
本文内容节选自由msup主办的第七届TOP100summit,JFrog架构师高欣分享的<Kubernetes is hard!JFrog的Kubernetes实践>实录. 本文为JFro ...
- (转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)
上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程 ...
- SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之三十六 - 使用 Chrome 开发者工具 Elements 标签动态修改 CSS 类试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之三十五 - 如何把本地开发的 SAP UI5 应用部署到 ABAP 服务器上试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之三十四 - SAP UI5 应用基于设备类型的页面适配功能(Device Adaptation)试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- spring boot项目 中止运行 最常用的几种方法
- 练习题3(求四位会员卡号之和)
- 你会因为什么原因而离职
- jdk8分组统计字段和_JDK 8流和分组
- HashSet源码分析:JDK源码系列
- Java高级语法笔记-库的使用(jar)
- FTP下载文件中文名乱码FTP访问
- 23种设计模式(1)-单例模式
- UI实用干货素材|工作管理、日程日历专辑
- 【转载】Android加载大图片OOM异常解决
- [LeetCode] Balanced Binary Tree 平衡二叉树
- 华为NP课程笔记10-BGP案例讲解
- 取消计算机触摸板,笔记本电脑触摸板,教您笔记本电脑触摸板怎么关闭
- Spring Cloud Eureka源码分析之心跳续约及自我保护机制
- 别被吉利的“车企”一面晃了眼
- 忘记teamviewer密码怎么办?
- 输入验证码,一直报错验证码错误(内网多服务器)
- 为何很多 App 图标使用白色做底色?
- html数字数据走势图,利用HTML5实现数据曲线走势图表代码
- runy和php_原创-如何修改PHP网页,我要有的分都给你,谢谢