一:devops的官方概念:

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
devops解决了我们迭代开发时遇到的各种问题。

二:devops的管理流程和目标

在这里插入图片描述

在这里插入图片描述

Devops强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件生命周期性管理,从而更快,更频繁地交付更稳定的文件。

![在这里插入图片描述](https://img-blog.csdnimg.cn/f4121c91824940cebc4e3dfb92f890d6.png

三:devops的流程构建
在这里插入图片描述
流程构建管理仓库使用gitlab+maven+jenkins,准备3台虚拟机时间设置一致。

node1(jenkins)10.20.42.9
node2(gitlab)10.20.42.5
node3(部署服务器)10.20.42.3

node2:使用docker安装gitlab。

[root@node2 ~]# cd /usr/local/
[root@node2 local]# mkdir docker
[root@node2 local]# cd docker/
[root@node2 docker]# mkdir gitlab_docker
[root@node2 docker]# cd gitlab_docker/
[root@node2 gitlab_docker]# docker pull gitlab/gitlab-ce:latest 
[root@node2 gitlab_docker]# cat docker-compose.yml   编辑一个yml文件来管理容器。
version: '3.3'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always         这表示只要docker启动,这个容器就启动。
    hostname: '10.20.42.5'  服务端的地址。
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://10.20.42.5:8929'  监听的服务端地址。
        gitlab_rails['gitlab_shell_ssh_port'] = 2224   这个是ssh端口,修改成为了2224
    ports:      映射到宿主机的端口
      - '8929:8929'
      - '2224:22'
    volumes:    持久化目录
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'
[root@node2 gitlab_docker]# 
[root@node2 gitlab_docker]# docker-compose up -d 
[root@node2 gitlab_docker]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND             CREATED       STATUS                 PORTS                                                                                               NAMES
235d0bef0ab8   gitlab/gitlab-ce:latest   "/assets/wrapper"   2 weeks ago   Up 5 hours (healthy)   80/tcp, 443/tcp, 0.0.0.0:8929->8929/tcp, :::8929->8929/tcp, 0.0.0.0:2224->22/tcp, :::2224->22/tcp   gitlabdocker_web_1
[root@node2 gitlab_docker]# ss -tnlp | grep docker
LISTEN     0      128          *:8929                     *:*                   users:(("docker-proxy",pid=77217,fd=4))
LISTEN     0      128          *:2224                     *:*                   users:(("docker-proxy",pid=77239,fd=4))
LISTEN     0      128       [::]:8929                  [::]:*                   users:(("docker-proxy",pid=77224,fd=4))
LISTEN     0      128       [::]:2224                  [::]:*                   users:(("docker-proxy",pid=77246,fd=4))
[root@node2 gitlab_docker]# 

运行完成之后,直接通过浏览器访问即可。
账号:root
密码通过命令查看。
[root@node2 gitlab_docker]# docker exec  -it gitlabdocker_web_1 bash
root@10:/# cat /etc/gitlab/initial_root_password  可以查看到密码。

node1 安装maven,jdk

1,安装docker社区版,设置开机自启动

# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@node1 yum.repos.d]# yum install docker-ce -y

2,安装docker-compose

[root@node1 yum.repos.d]# yum install docker-compose -y


3,下载maven软件包,解压至/usr/local目录

https://maven.apache.org/download.cgi    maven官方下载页面
https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz   

# tar -xzf apache-maven-3.9.4-bin.tar.gz -C /usr/local/


4,下载jdk软件包,解压至/usr/local目录

https://login.oracle.com/mysso/signon.jsp   oracal官网下载即可,需要登录。

# tar -xzf jdk-8u381-linux-x64.tar.gz -C /usr/local/

5,配置maven的仓库地址,直接网上搜索maven的阿里云仓库地址即可,并且设置一下jdk的编译插件使用1.8进行编译。

# vim maven/conf/settings.xml 

设置镜像的私服地址。
<mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->                注释下面是添加项
    <mirror>
      <id>AliRepo-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Mirror Name for the Alirepo.</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>


 <profile>
      <id>env-dev</id>

      <activation>
        <property>
          <name>target-env</name>
          <value>dev</value>
        </property>
      </activation>

      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
    -->                  注释下面是添加的内容。网上搜索maven的jdk编译插件即可。
  设置jdk8的编译插件。
  <profiles>
         <profile>
            <id>jdk8</id>
            <activation>
               <activeByDefault>true</activeByDefault>
               <jdk>1.8</jdk>
            </activation>
            <properties>
                    <maven.compiler.source>1.8</maven.compiler.source>
                    <maven.compiler.target>1.8</maven.compiler.target>
                    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
</profile>
</profiles>

默认开启这项。

<activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>
  -->
  <activeProfiles>
    <activeProfile>jdk8</activeProfile>
  </activeProfiles>
配置好构建代码的构建工具后,准备jenkins

node1安装jenkins
jenkins介绍

1,jenkins是一个开源的持续集成,持续部署的基于Java开发的工具。
2,jenkins应用广泛,大多数互联网公司都采用jenkins配合gitlab,docker,k8s作为实现devops的核心工具。
3,jenkins最强大的就在于插件,jenkins官方提供大量的插件库,来实现CI/CD过程中的各种琐碎功能。
4,jenkins最主要的工作就是将gitlab上可以构建的工程代码拉取并且进行构建,在根据流程可以选择发布到测试环境或者生产环境。

CI过程即是通过jenkins将代码拉取,构建,制作镜像交给测试人员测试
持续集成:让软件代码可以持续集成到主干上(gitlab),并自动构建和测试

CD过程即是通过jenkins将打好的标签的发行版本拉取,构建,制作镜像交给运维人员部署。

持续交付:让经过持续集成的代码可以进行手动部署。
持续部署:让可以持续交付的代码随时随地的自动化部署。

在这里插入图片描述
Jenkins安装,基于docker进行安装

1,访问Jenkins官网,pull长期稳定版本

https://hub.docker.com/r/jenkins/jenkins/tags?page=1&name=2.401.3

docker pull jenkins/jenkins:2.401.3-lts

[root@node1 jenkins]# pwd
/usr/local/docker/jenkins
[root@node1 jenkins]# cat docker-compose.yml 
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:2.401.3-lts
    container_name: jenkins
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - "./data/:/var/jenkins_home/"  映射的宿主机目录data,插件和构建工具应放在容器这个目录中。


[root@node1 jenkins]# docker-compose up -d   启动容器
注意:当我们启动时候通过 docker-compose  logs -f  Jenkins  查到Jenkins没有对宿主机映射目录 data没有权限写入。

即:
[root@node1 jenkins]# chmod 777 data/  
[root@node1 jenkins]# docker-compose restart       修改权限后,再重启下Jenkins


2,启动成功后,通过访问8080端口访问Jenkins。需要输入密码

[root@node1 jenkins]# docker logs -f jenkins        通过查询日志,查询Jenkins密码。

3,注意重新启动Jenkins后,由于Jenkins需要下载大量内容,由于默认下载速度较慢,需要修改国内镜像站

[root@node1 data]# pwd
/usr/local/docker/jenkins/data
[root@node1 data]# vi hudson.model.UpdateCenter.xml       

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>            修改这项内容即可。替换为 http://mirror.esuni.jp/jenkins/updates/update-center.json
  </site>
</sites>

访问Jenkins,解锁jenkins输入密码->选择插件来安装->等待插件进行安装->创建管理员账户->实力配置。
注意:如果网速比较慢,下载失败后也可以访问jenkins网站进行插件下载,如果还是下载慢就修改jenkins镜像源。

1,安装两个插件。

Git Parameter Plug-In:用于从gitlab仓库中拉取代码进行构建 publish Over
SSH:用于向远端服务器传送指令和文件。

在这里插入图片描述
在这里插入图片描述

2,将maven,jdk放到Jenkins数据卷data目录下,在Jenkins中指定映射到容器目录中jdk和maven

[root@node1 data]# mv /usr/local/jdk/ ./
[root@node1 data]# mv /usr/local/maven/ ./
[root@node1 data]# ll
total 64
-rw-r--r--.  1 yanss yanss 1663 Aug 11 14:54 config.xml
-rw-r--r--.  1 yanss yanss  200 Aug 11 14:54 copy_reference_file.log
-rw-r--r--.  1 yanss yanss  156 Aug 11 14:54 hudson.model.UpdateCenter.xml
-rw-r--r--.  1 yanss yanss  370 Aug 10 18:31 hudson.plugins.git.GitTool.xml
-rw-------.  1 yanss yanss 1680 Aug 10 18:31 identity.key.enc
drwxr-xr-x.  8 root  root  4096 Aug 10 15:41 jdk
-rw-r--r--.  1 yanss yanss    7 Aug 11 14:54 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--.  1 yanss yanss    7 Aug 11 14:34 jenkins.install.UpgradeWizard.state
-rw-r--r--.  1 yanss yanss  180 Aug 11 14:34 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r--.  1 yanss yanss  171 Aug 10 18:25 jenkins.telemetry.Correlator.xml
drwxr-xr-x.  2 yanss yanss    6 Aug 10 18:25 jobs
drwxr-xr-x.  6 root  root    99 Aug 10 15:36 maven
-rw-r--r--.  1 yanss yanss  907 Aug 11 14:54 nodeMonitors.xml
drwxr-xr-x.  2 yanss yanss    6 Aug 10 18:25 nodes
drwxr-xr-x. 92 yanss yanss 8192 Aug 11 14:49 plugins
-rw-r--r--.  1 yanss yanss  129 Aug 11 14:51 queue.xml.bak
-rw-r--r--.  1 yanss yanss   64 Aug 10 18:25 secret.key
-rw-r--r--.  1 yanss yanss    0 Aug 10 18:25 secret.key.not-so-secret
drwx------.  2 yanss yanss  261 Aug 11 14:45 secrets
drwxr-xr-x.  2 yanss yanss  182 Aug 11 14:49 updates
drwxr-xr-x.  2 yanss yanss   24 Aug 10 18:25 userContent
drwxr-xr-x.  3 yanss yanss   56 Aug 11 14:34 users
drwxr-xr-x. 11 yanss yanss  264 Aug 10 18:25 war
3,进行全局配置,指定我们jdk所在容器中的位置。

在这里插入图片描述
在这里插入图片描述

4, 新建测试代码

在这里插入图片描述
5,将测试代码构建成可执行的jar包,通过dockfile构建出一个镜像运行在docker容器内
在这里插入图片描述在这里插入图片描述

即:编写完成之后,在本地测试没有问题的话就可以推送到代码仓库了。
6,登录到gitlab仓库地址新建一个项目。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7,创建完仓库之后需要将我们的代码推送到gitlab上

在这里插入图片描述
在这里插入图片描述

即:push之后复制gitlab仓库地址就可以推送出去了。
8,准备操作jenkins像gitlab上拉取测试代码进行构建并部署到node3机器上。
1,新建一个任务定义名称为mytest。

在这里插入图片描述

2,配置任务

在这里插入图片描述

3,源码管理设定gitlab仓库地址

在这里插入图片描述

4,定义构建时操作我们需要去调用顶层maven去帮我们构建jar包

在这里插入图片描述

5,定义构建之后的操作。

![在这里插入图片描述](https://img-blog.csdnimg.cn/5277a6c793c2473f83983dffe10b2942.png、
在这里插入图片描述

6,保存应用后立即构建查看node3主机的test目录中。

在这里插入图片描述

[root@node3 docker]# ls
docker-compose.yml  Dockerfile  mytest.jar  Yyr-0.0.1-SNAPSHOT.jar
[root@node3 docker]# cd ..
[root@node3 test]# ls
docker  target
[root@node3 test]# pwd
/usr/local/test
[root@node3 test]# cd docker/
[root@node3 docker]# ls
docker-compose.yml  Dockerfile  mytest.jar  Yyr-0.0.1-SNAPSHOT.jar
[root@node3 docker]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS        PORTS                                       NAMES
24d29214b666   mytest:v1.0   "/bin/sh -c 'java -j…"   28 hours ago   Up 28 hours   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   mytest
[root@node3 docker]# 
7,直接访问node3地址

在这里插入图片描述

8,即:持续集成的话当我们在测试代码中修改了代码再次push到我们gitlab仓库中,再放问node3地址会是不一样的效果。

在这里插入图片描述
9,修改好测试代码后,再次构建一下。
在这里插入图片描述

10,在访问node3地址,发现版本号已经出来了

在这里插入图片描述

11,注意当我们进行构建多次时发现我们本地会出现多个none镜像。我们通过命令将其删除。
[root@node3 docker]# docker image ls -a
REPOSITORY                      TAG        IMAGE ID       CREATED         SIZE
mytest                          v1.0       f1522d9b326b   3 minutes ago   833MB
<none>                          <none>     8246781c404a   3 minutes ago   833MB
<none>                          <none>     4fb16ef6a115   3 minutes ago   833MB
<none>                          <none>     e4d19953bc3f   29 hours ago    833MB
<none>                          <none>     e47f4ae43b82   29 hours ago    833MB
<none>                          <none>     e1f4e7a6decf   29 hours ago    833MB
<none>                          <none>     141315f16d3a   32 hours ago    833MB
<none>                          <none>     3c8ac8c4fe76   32 hours ago    833MB
<none>                          <none>     30b197346d12   32 hours ago    833MB
daocloud.io/gizwits2015/java8   java       b3ae0c4205b6   6 years ago     214MB
daocloud.io/library/java        8u40-jdk   4aefdb29fd43   8 years ago     816MB
[root@node3 docker]# docker image p
prune  pull   push   
[root@node3 docker]# docker image prune -f
Deleted Images:
deleted: sha256:e1f4e7a6decf20ed92d03d9dfa816c5a97a066cc18fb32b8917371618d5efa46
deleted: sha256:e47f4ae43b8205f2cf6362ccf600fab2ea102442c1bceff817bdc3a51ec79db5
deleted: sha256:e4d19953bc3f03173fc29b2268729845df0cd1a894a7431cb5f51139a4292269
deleted: sha256:fb848c83f20d95b2ac438a89717d6718d0206eb0233a30308b39d4f04783dd57
deleted: sha256:3c8ac8c4fe76a86f92f2c3debe39e504c4f94931758e27cd88384a1c432964fe
deleted: sha256:141315f16d3a50d2df75c88b8c7953b4145cfead9f7e3e453c53e086d1af9527
deleted: sha256:30b197346d122b312850acb6d9135ad61eeabb46443093dac82d6ebc723a71c1
deleted: sha256:e7668530468fabf5e2f043baa3b7ad52280805f171ea09d7f302a2fa60baea16

Total reclaimed space: 35.48MB
[root@node3 docker]# docker image ls -a
REPOSITORY                      TAG        IMAGE ID       CREATED         SIZE
<none>                          <none>     4fb16ef6a115   4 minutes ago   833MB
mytest                          v1.0       f1522d9b326b   4 minutes ago   833MB
<none>                          <none>     8246781c404a   4 minutes ago   833MB
daocloud.io/gizwits2015/java8   java       b3ae0c4205b6   6 years ago     214MB
daocloud.io/library/java        8u40-jdk   4aefdb29fd43   8 years ago     816MB
12,即可以将Jenkins帮我们来进行删除将这条命令添加到构建后操作中保存应用即可。

在这里插入图片描述

到此刻,我们整个CI的流程就跑通了,CI的主要流程就是在做测试。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐