DevOps:工具篇

一、 什么是DevOps?

Devops作为敏捷开发的基石,脱离了DevOps谈敏捷开发,只会变得的不“敏捷”,它助力于敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,以达到项目快速交付,一个敏捷开发的流程图大致如下:


DevOps:工具篇_第1张图片
image.png

“DevOps”从字面意思上很简单,就是 Development(开发)和 Operations (运维)的组合。这个“开发”不能片面的理解为写代码,应该是一个开发阶段或过程,在这个阶段需要做大量的可行性分析、成本预算等,这个在其他行业也是一样,三峡大坝是世界上最大的水利工程,在修建它之前做了大量可行性研究,并为此提早几十年先修建了一座小型的葛洲坝电站,从中积累了大量的经验。而“运维”要考虑后期通过何种方式升级,如何监控服务,如何快速定位和解决问题等。而实际上,它是一组过程、方法与系统的统称,到目前为止没有一个标准,我觉得只要有助于团队之间合作,能够加快项目交付就是一套好的DevOps,就应该大力使用它,反之则不要用。如何建立一套有效的DevOps工具链,我觉得可以从以下几方面入手:

  • 团队扁平化,降低沟通成本,促使项目经理、产品经理、开发团队、测试团队、运维团队有效的协作
DevOps:工具篇_第2张图片
image.png
  • 一些工具如leangoo、jira的看板图、燃尽图等,可以明确任务,明确责任


    DevOps:工具篇_第3张图片
    image.png
  • 快速响应,快速调整,快速迭代


    DevOps:工具篇_第4张图片
    image.png
  • 实时监控,对项目监控、对人员监控、对服务监控


    DevOps:工具篇_第5张图片
    image.png

二、 实现DevOps所需工具?

  • 项目管理工具(PM):Jira代码管理
  • 代码管理工具:SVN、GibLab等
  • 持续集成工具:Jenkins、Gitlab-CI
  • 镜像仓库:Registry、Harbor
  • 部署环境:Docker、K8S
  • 部署脚本:Shell、Python等
DevOps:工具篇_第6张图片
image.png

三、 安装和配置

1. 安装Jenkins

$ cat < start.sh
#!/bin/bash
HOST_NAME=jenkins.kq
GITLAB_DIR=`pwd`

docker run \
 -u root \
 --hostname \${HOST_NAME} \
 --name jenkins \
 --rm \
 -d \
 -p 9080:9080 \
 -p 50000:50000 \
 -v ${GITLAB_DIR}:/opt/jenkins \
 -v /var/run/docker.sock:/var/run/docker.sock \
 jenkinsci/blueocean
EOF
$ chmod u+x start.sh
$ ./start.sh

安装插件
解决插件安装慢问题,替换后重新启动服务

  • 替换 google 为 baidu
  • 替换 updates.jenkins-ci.org/download 为mirrors.tuna.tsinghua.edu.cn/jenkins
$ vi /root/.jenkins/updates/default.json

修改配置
将jenkins中匿名用户可读选中,跨站的访问去掉

DevOps:工具篇_第7张图片
image.png

输入一个令牌
image.png

在Gitlab中添加Hook(root登录)


DevOps:工具篇_第8张图片
image.png

其他代码管理工具配置方式类似

2. 安装GitLab

docker安装方式

$ cat < start.sh
#!/bin/bash
HOST_NAME=gitlab.kq
GITLAB_DIR=`pwd`
docker stop gitlab
docker rm gitlab
docker run -d \
  --hostname \${HOST_NAME} \
  -p 8443:443 -p 9090:80 -p 2222:22 \
--name gitlab \
--memory=2048M \
  -v ${GITLAB_DIR}/config:/etc/gitlab \
  -v ${GITLAB_DIR}/logs:/var/log/gitlab \
  -v ${GITLAB_DIR}/data:/var/opt/gitlab \
  registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:latest
EOF

$ chmod u+x start.sh
$ ./start.sh

配置
安装完成之后,可以在/etc/gitblab/gitlab.rb中按照需求修改配置,

  • 主要需要修改external_url,改成gitlab.kq:9090
  • 或修改nginx配置,修改监听端口,增加 ssl 配置,设置 header:
# external_url主要是配置拉取代码是的地址,如果端口不是80,需要修改成指定的端口
external_url 'http://gitlab.kq:9090'
# 这个是配置gitlab监听在哪个地址上    
nginx['listen_addresses'] = ['127.0.0.1']
# 这个配置gitlab监听在哪个端口上    
nginx['listen_port'] = 9090
# For GitLab
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
# proxy set header
nginx['proxy_set_headers'] = {
  "X-Forwarded-Proto" => "http",
  "CUSTOM_HEADER" => "VALUE"
 }

访问:http://gitlab.kq:9090 账号:root/12345678

3. 安装harhor

安装harhor需要先安装docker和docker-compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

在harbor安装机器上生成证书(如果不用https访问,此步骤略)

## 生成证书
$ mkdir -pv  /etc/harbor/pki/ & cd /etc/harbor/pki/
$ openssl genrsa -out harbor-ca.key
$ openssl req -x509 -new -nodes -key harbor-ca.key  -subj "/CN=harbor.kq" -days 7120 -out harbor-ca.crt

## 添加harbor域名,域名要和证书中的域名保持一致
$ echo "192.168.x.x  harbor.kq" >> /etc/hosts 

修改harbor.yml文件,将hostname改成harbor,配置证书位置(如果不用https访问,此步骤略)

hostname: harbor

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # 配置证书位置
  certificate: /etc/harbor/pki/harbor-ca.crt
  private_key: /etc/harbor/pki/harbor-ca.key
## 修改admin密码  
harbor_admin_password: 123456  

安装并启动harbor

$ gzip -dv  harbor-offline-installer-v1.10.1.tgz 
$ tar zxvf harbor-offline-installer-v1.10.1.tar
$ ./install.sh

# 在daemon.json "insecure-registries": ["harbor.kq"],否则会push到docker.io上
$ vi /etc/docker/daemon.json 
{
    ......
    "insecure-registries": ["harbor.kq"]
}

# harbor是通过docker-compose 来启动的
$ cd /root/harbor
$ docker-compose up

# 如果启动时报错,把docker服务重启试试
$ systemctl daemon-reload
$ service docker restart

在其他主机测试harbor

$ echo "192.168.x.x  harbor.kq" >> /etc/hosts 

## 拷贝证书到doker目录下,否则登录会报: x509: cannot validate certificate
$ mkdir -p /etc/docker/certs.d/harbor.kq/
$ scp [email protected]:/etc/harbor/pki/harbor-ca.crt /etc/docker/certs.d/harbor.kq/

# 在daemon.json "insecure-registries": ["harbor.kq"],否则会push到docker.io上
$ vi /etc/docker/daemon.json 
{
    ......
    "insecure-registries": ["harbor.kq"]
}

$ systemctl daemon-reload
$ service docker restart

访问页面: http://192.168.x.x/ 用admin/123456登录

创建一个公开仓库:oauth2,创建私有仓库的话集群中所有节点都需要登录才能拉取镜像

$ docker login harbor.kq
Username: admin
Password: [123456]
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

## 推送一个Nginx镜像到harbor上
## !!!一定要加仓库名,否则无法push
$ docker tag registry.cn-hangzhou.aliyuncs.com/moobox/nginx:latest harbor.kq/<仓库名>/nginx:latest
$ docker push harbor.kq/<仓库名>/nginx:latest   

harbor用久了,会占用大量磁盘空间,执行下面命令进行垃圾回收

docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect  /etc/registry/config.yml

5. 安装nexus

参考,nexus里可以配置3种类型的仓库,分别是proxy、hosted、group

  • proxy是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用
  • hosted是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里
  • group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了

创建一个阿里云proxy的代理库

image.png

添加到maven-public组中

将创建的阿里云proxy库,添加到maven-public组中,访问优先级自上而下


DevOps:工具篇_第9张图片
image.png

在本地配置仓库地址:$HOME/.m2/setting.xml文件


    maven-public
    central
    Nexus kq
    http://192.168.x.x:8082/repository/maven-public/

你可能感兴趣的:(DevOps:工具篇)