2019独角兽企业重金招聘Python工程师标准>>>

1,mesos介绍

Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache Incubator中的项目。Mesos计算框架一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。使用ZooKeeper实现容错复制,使用Linux Containers来隔离任务,支持多种资源计划分配。

总体架构 Apache Mesos由四个组件组成,分别是Mesos-master,mesos-slave,framework和executor。

mesos中的基本术语解释

(1)Mesos-master:

是整个系统的核心,负责管理接入mesos的各个framework(由frameworksmanager管理)和slave(由slavesmanager管理),并将slave上的资源按照某种策略分配给framework(由独立插拔模块Allocator管理)。

(2)Mesos-slave:

负责接收并执行来自mesos-master的命令、管理节点上的mesos-task,并为各个task分配资源。mesos-slave将自己的资源量发送给mesos-master,由mesos-master中的Allocator模块决定将资源分配给哪个framework,当前考虑的资源有CPU和内存两种,也就是说,mesos-slave会将CPU个数和内存量发送给mesos-master,而用户提交作业时,需要指定每个任务需要的CPU个数和内存量,这样,当任务运行时,mesos-slave会将任务放到包含固定资源的linux container中运行,以达到资源隔离的效果。

(3)Framework:

是指外部的计算框架,如Hadoop,Mesos等,这些计算框架可通过注册的方式接入mesos,以便mesos进行统一管理和资源分配。Mesos要求可接入的框架必须有一个调度器模块,该调度器负责框架内部的任务调度。当一个framework想要接入mesos时,需要修改自己的调度器,以便向mesos注册,并获取mesos分配给自己的资源, 这样再由自己的调度器将这些资源分配给框架中的任务,也就是说,整个mesos系统采用了双层调度框架:

(4)Executor:

执行器,安装到mesos-slave上,用于启动计算框架中的task。

2,安装

2.1环境介绍

内核版本:

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

系统版本:

[root@localhost ~]# more /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

docker版本:

[root@localhost ~]# docker --version
Docker version 1.12.5, build 047e51b/1.12.5

mesos版本:

root@localhost ~]# rpm -qa |grep mesos
mesosphere-el-repo-7-1.noarch
mesos-1.1.0-2.0.107.centos701406.x86_64
mesosphere-zookeeper-3.4.6-0.1.20141204175332.centos7.x86_64[root@localhost ~]# rpm -qa |grep marathon
marathon-1.4.1-1.0.633.el7.x86_64

集群服务器功能介绍:

10.1.13.214(master) mesos-master,marathon,zookeeper

10.1.13.211 (slave01)mesos-slave

10.1.13.213 (slave02)mesos-slave

由于mesos的master和slave节点之间是通过zookeeper进行关联通信的,而且zookeeper建议master至少是三个节点,这里测试用一个也可以

2.2安装前准备

所有服务器上设置

修改yum源,所有机器都要做

#mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.default
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#yum makecache

添加mesosphere源

#rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mesosphere

配置ssh免密码登陆

关闭防火墙

#systemctl stop firewalld
#systemctl disable firewalld

关闭selinux

#vi /etc/selinux/config
#SELINUX=enforcing  #注释掉
#SELINUXTYPE=targeted  #注释掉
SELINUX=disabled  #增加#setenforce 0   命令行关闭selinux

2.3 zookeeper安装

只在10.1.13.214上安装配置

java环境安装配置

#wget http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz
#tar zxvf jdk-8u121-linux-x64.tar.gz
#mkdir /usr/java
#mv jdk1.8.0_121 /usr/java/

zookeeper 安装配置

安装方法1

安装
#wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
#tar zxvf zookeeper-3.4.9.tar.gz
#mv zookeeper-3.4.9 /usr/local/
#mv /usr/local/zookeeper-3.4.9 /usr/local/zookeeper配置
#cd /usr/local/zookeeper
#cp zoo_sample.cfg zoo.cfg
#vi zoo.cfg
dataDir=/usr/local/zookeeper/data    #数据目录,如果没有需要新建此目录
dataLogDir=/usr/local/zookeeper/logs  #日志目录,如果没有需要新建此目录如果是单机安装配置zookeeper,以下配置可忽略
server.0=10.1.13.214:2888:3888
server.1=10.1.13.215:2888:3888
server.2=10.1.13.216:2888:3888集群模式需要添加以下
#vi /user/local/zookeeper/data/myid
#创建myid文件,并编辑它,编辑的内容就是配置文件中server.后面跟着的号数。例如目前是在slave0机器上,则在myid文件中写入0
0修改zookeeper输出日志文件位置如果不做修改,默认zookeeper的日志输出信息都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。所以需要修改日志输出方式。具体操作如下:
1、修改$ZOOKEEPER_HOME/bin目录下的zkEnv.sh文件,ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP,指定INFO,ROLLINGFILE的日志APPENDER.
2、建立日志输出文件夹
#mkdir -p /var/log/zookeeper
#chmod 755 /var/log/zookeeper3,修改zkEnv.sh
#vi /usr/local/zookeeper/bin/zkEnv.sh
...56     ZOO_LOG_DIR="/var/log/zookeeper"     #指定想要输出到哪个目录
...61     ZOO_LOG4J_PROP="INFO,ROLLINGFILE"    #ROLLINGFILE的日志APPENDER.
...
4、修改$ZOOKEEPER_HOME/conf/log4j.properties文件的:zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持一致,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender.5,修改log4j.properties
# vim /usr/local/zookeeper/conf/log4j.properties
...
2 zookeeper.root.logger=INFO, ROLLINGFILE      #值与前一个文件的ZOO_LOG4J_PROP
...
53 log4j.appender.TRACEFILE=org.apache.log4j.RollingFileAppender      #如果想要按照天轮转,可以修改为DaliyRollingFileAppender
...

环境变量配置

#vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export JAVA_HOME=/usr/java/jdk1.8.0_121
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin#source /etc/profile

启动 zookeeper 服务

#cd /user/local/zookeeper/bin
#zkServer.sh start

安装方法2 (本文档使用该方法)

#yum install mesosphere-zookeeper
zookeeper启动文件在/opt/mesosphere/zookeeper/bin下,配置文件在/etc/zookeeper/zoo.cfg配置同上

2.4 mesos-master 配置

只在10.1.13.214上配置

安装mesos-master

#yum install mesos

配置mesos

[root@localhost ~]# cat /etc/mesos/zk
zk://10.1.13.214:2181/mesos

如果是多台master+zookeeper

[root@localhost ~]# cat /etc/mesos/zk
zk://10.1.13.214:2181/mesos,zk://10.1.13.214:2181/mesos,zk://10.1.13.214:2181/mesosecho 2 > /etc/mesos-master/quorum
#如果有5要master+zookeeper
#echo 4 > /etc/mesos-master/quorum 给每台master起名字
master1: echo 10.1.13.214 | sudo tee /etc/mesos-master/hostname
master2: echo 10.1.13.215 | sudo tee /etc/mesos-master/hostname
master3: echo 10.1.13.216 | sudo tee /etc/mesos-master/hostname

启动master服务

#systemctl stop  mesos-slave
#systemctl restart mesos-master
#systemctl status mesos-master
#systemctl enable mesos-master

服务启动后,可以通过浏览器访问查看系统信息: http://10.1.13.214:5050/

2.5 mesos-marathon安装配置

Marathon 的其它重要特性还包括:

  • 支持零停机时间部署,包括滚动部署、蓝绿部署与金丝雀部署模式。

  • 基于 HTTP、TCP 以及命令之应用程序运行状态检查。

  • 指标发送与收集集成(包括 Graphite、DataDog 以及StatsD)。

  • 具备一套强大的事件总线,使得 DevOps 人员以编程化方式通过定制化模式实现应用程序变更响应。

  • 具备用于应对网络与节点故障的弹性,且同时适用于 Marathon 本身及其管理的应用程序。

  • 包括用户认证以及基于角色访问控制在内的多种安全功能。

  • 采用一套灵活的插件架构,使得插件能够被定制化集成至现有企业IT环境当中。

只在10.1.13.214上配置

安装mesos-marathon

#yum install marathon

配置mesos-marathon

创建下他的配置文件的路径(yum装的没给我们创建)

#mkdir -p /etc/marathon/conf/ && touch hostname
#echo 10.1.13.214 | sudo tee /etc/marathon/conf/hostname

启动服务,添加开机启动

#systemctl start marathon
#systemctl status marathon
#systemctl enable marathon

访问验证

http://10.1.13.214:8080

2.6 chronos安装配置

chronos介绍

Chronos 是一个具备容错特性的作业调度器,可处理依赖性和基于 ISO8601 的调度。Chronos 是由 Airbnb 公司推出的用来替代 cron 的开源产品。你可以用它来对作业进行编排,支持使用 Mesos 作为作业执行器,支持和 Hadoop 进行交互。可定义作业执行完成后的触发器。支持任意长度的依赖链。

原理

chronos以framework身份接入Mesos,支持zookeeper选举高可用,同时将所有的定时任务配置存储在zookeeper里。

chronos的工作流程描述如下:

1,从zk获取全部的任务列表。

2,以scheduler身份接入到mesos,分析任务的执行依赖。

3,分析出需要立即执行的任务和暂时不需要执行的任务。

4,将需要立即执行的任务放入执行队列,等待mesos offer足够的资源。

5,等待执行队列中的一个任务被执行,再次回到步骤1。

只在10.1.13.214上配置

安装chronos

#yum -y install chronos

启动服务,添加开机启动

#systemctl start chronos
#systemctl status chronos
#systemctl enable  chronos

访问验证

http://10.1.13.214:4400

2.7 mesos-slave 安装配置

在mesos-slave服务器上操作

mesos-slave服务器:

10.1.13.211

10.1.13.213

安装mesos-slave

#yum install mesos

配置实例

#touch /etc/mesos-slave/hostname
#echo 10.1.13.211 | sudo tee /etc/mesos-slave/hostname

ZooKeeper设定

# vi /etc/mesos/zk
zk://10.1.13.214:2181/mesos

客户端端口设置

#echo 5051 > /etc/mesos-slave/port

配置mesos-slave

注意:参数来containerizers的顺序很重要。它指定选择containerizer启动任务时使用的优先级。
#echo 'docker,mesos' > /etc/mesos-slave/containerizersslave 执行超时时间
#echo '5mins' > /etc/mesos-slave/executor_registration_timeout

启动服务,添加开机启动

#systemctl stop  mesos-master
#systemctl start docker
#systemctl start  mesos-slave
#systemctl status mesos-slave
#systemctl enable mesos-slave

报错日志查看命令

#journalctl -f -u  mesos-slave

2.8 mesos-dns安装配置

mesos-dns介绍

Mesos-DNS用来支持Mesos集群上的服务发现,使运行在Mesos上的应用和服务可以通过域名服务器来发现彼此。你只要知道一个Mesos数据中心上运行的应用的名字,就可以通过Mesos-DNS查询到该应用的IP和端口号。

Mesos-DNS定期去查询Mesos master,监测所有framework上运行的所有任务,并生成这些任务的DNS记录(包括A记录和SRV记录)。当Mesos集群上的任务发生启动、结束、重启等状态变化时,Mesos-DNS都会更新DNS记录,以保持最新的状态。

Mesos-DNS不需要与framework交互,只需要在启动的时候指向Mesos master即可。运行在Master Slave上的应用和服务,可以通过查询Mesos-DNS来发现它们依赖的应用和服务的IP和端口号。

对于那些非Mesos任务的DNS解析请求,Mesos-DNS自己解析不了,通常使用一个扩展DNS服务器,将这些请求转发到扩展DNS服务来解析即可。

slave上操作

mesos-dns安装

Mesos-DNS不需要编译安装,从https://github.com/mesosphere/mesos-dns/releases直接获取二进制文件即可

#mkdir /usr/local/mesos-dns
#cd /usr/local/mesos-dns
#curl -o mesos-dns https://github.com/mesosphere/mesos-dns/releases/download/v0.6.0/mesos-dns-v0.6.0-linux-amd64
#chmod +x mesos-dns

mesos-dns配置

编写json配置文件,mesos-dns启动时需要指定一个json的配置文件,这个配置文件里指定了Mesos master、域名等所需要的参数

#vim /usr/local/mesos-dns/config.json
{"zk": "zk://10.1.13.214:2181/mesos", #单机"zk": "zk://10.1.13.214:2181,10.1.13.215:2181,10.1.13.216:2181/mesos", #单机"masters": ["10.1.13.214:5050"], #单机"masters": ["10.1.13.214:5050","10.1.13.215:5050","10.1.13.216:5050"], #多机"refreshSeconds": 60,"ttl": 60,"domain": "mesos","port": 53,"resolvers": ["8.8.8.8"],"timeout": 5, "httpon": true,"dnson": true,"httpport": 8123,"externalon": true,"listener": "10.1.13.211",  #slave本机ip"SOAMname": "felix.mesos","SOARname": "admin.felix.mesos","SOARefresh": 60,"SOARetry":   600,"SOAExpire":  86400,"SOAMinttl": 60,"IPSources": ["netinfo", "mesos", "host"]
}

运行mesos-dns

使用命令行直接运行mesos-dns

#/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json &

使用marathon来运行mesos-dns

使用marathon来运行mesos-dns的好处是,即使在mesos-dns挂了之后也会立刻被重新运行。因为DNS服务器需要一个稳定的IP地址,所以通常将其指定在一个Mesos slave节点上运行。这里通过constraints字段来指定运行的slave的IP为10.1.13.213。在marathon上运行mesos-dns的json配置如下:

{"id": "/mesos-dns","cmd": "/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json","cpus": 0.2,"mem": 128,"disk": 0,"instances": 1,"constraints": [["hostname","CLUSTER","10.1.13.213"]]
}

使用mesos-dns

指定mesos-dns为域名服务器 为了让Mesos上运行的任务都使用mesos-dns作为主DNS服务器来解析,需要在Mesos slave节点的/etc/resolv.conf配置文件的第一行指定mesos-dns服务器为域名服务器。

[root@localhost ~]#sed -i '1s/^/nameserver 10.1.13.213\n/' /etc/resolv.conf

mesos-dns能解析的域名的格式

mesos-dns解析的域名格式为:应用名.框架名.mesos域

|构成项    |说明
|---------|------------------------------------------------------
|应用名    |  marathon上运行的应用或任务的名字,如果该应用在分组里面,需要在应用|名后面接上”-组名”;另外,应用名字里面有点号的,需要替换成减号”-“
|框架名    |  我们采用的是marathon,这里的名字就为marathon
|mesos域  |    这个是在mesos-dns的json配置文件里,domain字段定义的;默认为mesos

例如,Mesos用的框架为marathon,在test分组里运行着名为test04的应用,则该应用将对应名为test04-test.marathon.mesos的域名

测试

格式:dig 应用名.框架名.mesos域 +short @mesos-dns所在节点IP

[root@localhost ~]# yum install bind-utils  #安装dig命令
[root@localhost ~]# dig test03.marathon.mesos +short @10.1.13.213
10.1.13.211
#test03没有在分组中,@10.1.13.213是dig的参数,@mesos-dns所在节点IP
[root@localhost ~]# dig test04-test.marathon.mesos +short
10.1.13.211

注意,test03为marathon任务的name,test03这个任务要在marathon上运行,这里才能查到

mesos-dns HTTP API

Mesos-DNS提供了几个简单的REST API以供通过http方式来发现服务。 以上面mesos-dns在10.1.13.213为例,则有:

|URL                                                |说明
|----------------------------------------------------------------
|http://10.1.13.213:8123/v1/version             |mesos-dns版本信息
|http://10.1.13.213:8123/v1/config              |mesos-dns配置信息
|http://10.1.13.213:8123/v1/hosts/{host}            |该host的IP地址信息
|http://10.1.13.213:8123/v1/services/{service}  |该service的host、IP、端口信息

注意: host为mesos-dns能解析的域名,如:test04-test.marathon.mesos service为DNS SRV记录名,如:test04-test.tcp.marathon.mesos

3. marathon+mesos的使用

3.1. mesos的使用

mesos安装完成后,下面我们来运行第一mesos任务,注意刷新查看Mesos的Web界面,你会在Active Tasks看到我们测试的任务。

[root@linux-node1~]# MASTER=$(mesos-resolve `cat /etc/mesos/zk`)
[root@linux-node1~]# mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60"

注意,这时在marathon的web页面上看不到这个任务的信息。

3.2. marathon的使用

参考:http://www.cnblogs.com/ee900222/p/docker_2.html

例1

1.用nc命令启动一个http服务

在各个节点上安装netcat

#yum install nmap-ncat

2.在marathon页面,点击“create application”创建任务

ID:test01
CPUs:1
Memory(MIB):64
Disk Space(MIB):0
Instances:2
Command: while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done

3.点击“Create”后,创建并执行任务

4.在Applications页面,点击任务,可以看到任务的详细信息, 可以看到任务分布在两个节点上,访问HTTP服务启动的端口

5.在各节点可以看到nc进程正启动着

[root@localhost ~]# curl http://10.1.13.211:31699
Hello World

测试证明如果将mesos-slave停了,nc的进程还是存在,端口还是可以访问的。

mesos-contain,mesos-executo,nc三个进程是同时启动的。

例2 docker测试

镜像地址:https://hub.daocloud.io/

1,启动docker,抓取centos镜像

#docker pull daocloud.io/library/centos:latest

2,创建json,等同于marathon上的"Create Application"

#vim marathon-test.json
{
"container": {
"type": "DOCKER",
"docker": {
"image": "daocloud.io/library/centos"
}
},
"id": "centos-marathon",
"instances": 2,
"cpus": 0.5,
"mem": 128,
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}

3,在marathon上创建任务

[root@bogon ~]# curl -X POST -H "Content-Type: application/json" http://10.1.13.214:8080/v2/app -d @marathon-test.json

4,在Marathon页面确认容器已经启动

5,在Mesos页面确认任务正在执行中

6,从stdout信息确认输出的时间

7,在节点上确认容器已经启动

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS              PORTS               NAMES
374190c7ca4f        daocloud.io/library/centos   "/bin/sh -c 'while sl"   About a minute ago   Up About a minute                       mesos-8ae96fe5-3b2d-4767-8c5c-6998fe829c30-S11397.29937c70-8997-4ee8-b782-9273f41c082b

8,查看容器的日志,确认输出的时间

[root@localhost ~]# docker logs 374190c7ca4f
08:58:36
08:58:46
08:58:56
08:59:06
08:59:16
08:59:26
08:59:36
08:59:46

3.3. chronos的使用

例1

1.在Chronos页面,点击“New Job”创建任务

NAME:test1
COMMAND: sleep 60
SCHEDULE: R   / 2017-03-03 T 07:05:00 Z / P T24H

这里是UTC时间,计算方式: UTC = 本地时间(北京时间))-0800 例如,本地(北京)时间是0325 (凌晨3点25分),那么,UTC就是 0325 - 0800 = -0475,负号意味着是前一天, -0475 + 2400= 1925,既前一天的晚上7点25分。

2,创建完成,点击任务栏上的“Force Run”

3,查看运行结果

可以在mesos界面中查看,定时任务的运行结果。

例2 docker的使用

1,启动docker,抓取nginx镜像

#docker pull daocloud.io/nginx
#mkdir -p /data/content
#vim /data/content/index.html
test page
[root@localhost ~]# docker run -p 8800:80 --name chronos-nginx -v /data/content:/usr/share/nginx/html:ro -d daocloud.io/nginx &[root@localhost ~]# curl http://10.1.13.213:8800
test page

2,创建json

# vi chronos-test.json
{
"container": {
"type": "DOCKER",
"image": "daocloud.io/nginx",
"network": "BRIDGE"
},
"schedule": "R\/2017-03-06T09:25:00Z\/PT2M",
"name": "chronos-nginx",
"cpus": "0.5",
"mem": "256",
"uris": [],
"command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf"
}

network": "BRIDGE",因为Docker默认的网络模式是桥接,不指定默认也是BRIDGE

3,在Chronos上,创建任务

#curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://10.1.13.214:4400/scheduler/iso8601

转载于:https://my.oschina.net/duxuefeng/blog/854349

centos7 安装配置mesos+marathon+zookeeper相关推荐

  1. Centos7 安装配置 tomcat 并设置自动启动

    Centos7 安装配置 tomcat 并设置自动启动 下载安装包 这里选择适合Linux的安装包,下载到本地后上传到centos服务器,或者直接通过wget命令下载 1 2 3 4 # cd /us ...

  2. vnc安装linux教程,Centos7安装配置vncserver详细教程

    CentOS7安装配置vncserver教程 一.安装VNC 首先要保证目标服务器安装有图形化环境,Linux系统下常见的桌面环境有GNOME和KDE,这里我们首先通过Group的方式安装GNOME桌 ...

  3. centos7安装配置vsftp搭建FTP

    参考文章: CentOS7下安装FTP服务 详解CentOS7安装配置vsftp搭建FTP centos7之vsftp安装和使用 1.安装vsftp # 查看是否已安装 方法一 [root@local ...

  4. Centos7 安装,配置静态IP

    Centos7 安装,配置静态IP 本文采用桥接方式 镜像地址 下载好镜像后使用vmware虚拟机进行安装即可(注意设置root密码). 安装完成后使用root登录,输入设置好的密码 设置静态ip v ...

  5. CentOS7 安装配置FTP服务器详解

    CentOS7 安装配置FTP服务器详解 1.FTP简介 ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服 ...

  6. CentOS7 安装配置SFTP服务器详解

    CentOS7 安装配置SFTP服务器详解 1.SFTP简介 SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protoc ...

  7. centos7安装3.6版本zookeeper和jdk8

    Centos7下安装与测试zookeeper3.6 1 安装jdk并配置java环境变量 //网络下载安装包①get命令用来从指定的URL下载文件②/opt是约定俗成的第三方压缩安装包的临时存放点位 ...

  8. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强 ...

  9. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube

    1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候 ...

最新文章

  1. antd 中table上加不同字体颜色_字体渲染系统!微软终于决定优化Win10字体模糊问题...
  2. Angular Web App部署Linux Nginx Https
  3. [模拟] hdu 4452 Running Rabbits
  4. Scikit-Learn 新版本发布!一行代码秒升级
  5. ios xcode真机调试获取屏幕截屏
  6. SAP License:CO第一夜-成本要素会计
  7. jbod ugood 磁盘驱动状态_LSI Storcli 工具使用
  8. python基础知识点汇总_Python基础知识梳理
  9. 利用access创建数据字典_VBA数组与字典解决方案54讲:利用字典和数组提取数据并按行回填...
  10. 线材下料优化python算法_深度学习中的优化算法(Optimizer)理解与python实现
  11. linux模拟tcp测试工具,TCP测试小工具tcping for linux
  12. PLC电力线载波简介
  13. 勒索软件即服务与IAB产业浅析
  14. day015异常捕获和正则
  15. 第二次作业,制作调查问卷
  16. IntelliJ IDEA 快捷键及模板Templates设置
  17. 期末离散数学前三章关键知识点整理——应试。
  18. 【STL】C++ STL之array详解
  19. uniapp 保存base64图片
  20. 15 OpenCV4图像处理与视频分析实战(49.基于颜色的对象跟踪-.)

热门文章

  1. javaweb:servlet过滤器
  2. python二十九:__name__
  3. 让ie8、ie9支持媒体查询
  4. pycharm远程开发项目
  5. 让程序员薪资上升一个level的良心十条建议,你有做到吗?
  6. Java 10更新汇总,新的编译器通吃主流编程语言
  7. Leetcode_198_House Robber
  8. HTML中有关表格的基本属性知识
  9. 把别人的Tcl/Tk代码加入到Go语言里12 游戏5 画图案?
  10. Linux01-Linux编辑内核定制属于自己的内核49