软件测试IT必备技能

DevOps:工具篇

2021-02-24  本文已影响0人  程序员王旺

一、 什么是DevOps?

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


image.png

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

image.png

二、 实现DevOps所需工具?

image.png

三、 安装和配置

1. 安装Jenkins

$ cat <<EOF > 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

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

$ vi /root/.jenkins/updates/default.json

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

image.png
输入一个令牌
image.png

在Gitlab中添加Hook(root登录)


image.png

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

2. 安装GitLab

docker安装方式

$ cat <<EOF > 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主要是配置拉取代码是的地址,如果端口不是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 root@harbor.kq:/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的代理库

image.png

添加到maven-public组中

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


image.png

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

<mirror>
    <id>maven-public</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus kq</name>
    <url>http://192.168.x.x:8082/repository/maven-public/</url>
</mirror>
上一篇 下一篇

猜你喜欢

热点阅读