DevOps?自动化运维!

by: 雪月三十

DevOps流程图

DevOps介绍

命名

DevOps是Dev和Ops的结合
Dev(developer开发)
Ops(operation运维)

矛盾

在企业中dev和ops是有一种天然的矛盾,dev要求的是快速迭代,给公司挖掘出商业的价值,而ops则是强调的稳定,不让你如此快的开发,以稳定为主,不希望动代码(if no problem, don't touch it),所以他们之间有种天然的矛盾。

所以devops就是用来解决这双方的矛盾的,总的来说就是以合作为前提,相互支持,保证在软件开发的流程中,仍高效稳定。

职责

devops的职责就是通过自动化的形式 保证软件开发过程中的快速迭代和保证软件最后部署的稳定性

很多时候也会把Sec揉入到devolove中,有时候也会称之为DevSecOps

DevOps环境搭建

笔者对于整个自动化的流程以及devops架构比较感兴趣 即兴学习了一下 并配上实操过程中的大致流程

本次搭建所用到的自动化项目/工具

Gitlab、Jenkins 、Docker、Maven

硬件配置

两台机器都满足>=2c4g即可

我用到的配置

Gitlab

单独拿出一台服务器当作Gitlab仓库

官网

about.gitlab.com
https://docs.gitlab.com/ee/install/docker.html

安装

采用docker来安装

docker-compose.yml 编写
vim /~/gitlab/docker-compose.ym

yaml 复制代码
version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://35.241.71.137'   #填写本机ip和端口
        gitlab_rails['gitlab_shell_ssh_port'] = 2222   
        # Add any other gitlab.rb configuration here, each on its own line
    ports:
      - '80:80'
      - '443:443'
      - '2222:2222'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

添加全局变量

shell 复制代码
vim /etc/profile

#写以下内容
export GITLAB_HOME=$HOME/gitlab 

启动gitlab容器

shell 复制代码
docker-compose up -d

初始化设置

访问http://35.241.71.137地址后 进行登录

初始用户名:root

初始密码:cat /etc/gitlab/initial_root_password (需进入容器)

shell 复制代码
cat /etc/gitlab/initial_root_password

可以看到root账号密码
再次访问输入密码即可进入gitlab 及时更改密码防止忘记

这样第一步push环境就搭建完成了

Maven

装在另一台服务器中

官网

https://maven.apache.org/

下载

shell 复制代码
wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz
tar -zxvf apache-maven-3.9.3-bin.tar.gz
mv apache-maven-3.9.3-bin maven
mv maven /usr/local

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

java也需要提前下载 但无需设置环境变量

配置

shell 复制代码
vim /usr/local/maven/conf/settings.xml
#添加仓库源和jdk8的配置
#https://blog.csdn.net/lee_yanyi/article/details/124774038

Jenkins

官网

https://www.jenkins.io

下载

https://www.jenkins.io/download/

下载最新的lts版本即可

shell 复制代码
docker pull jenkins/jenkins:2.401.2-lts

启动

编写docker-compose

yaml 复制代码
version: "3.1"
services:
  jenkins:
     image: jenkins/jenkins:2.401.2-lts
     container_name: jenkins
     ports:
       - 80:8080
       - 50000:50000
     volumes:
       - ./data/:/var/jenkins_home/

初始化设置

查看后台管理密码

shell 复制代码
docker logs -f jenkins

访问地址
http://35.187.205.250/login?from=%2F

输入该密码

安装插件

选择插件来安装->安装
因源仓库在国外 可以选择换源来安装插件 就不详细写了

等待安装即可 出现安装错误可无视 不重要

安装完成后 下载我们用到的两个插件

Git Parameter

Publish Over SSH

配置maven和java

shell 复制代码
#将java和maven文件夹移动到jenkins挂载的data目录下
pwd
/usr/local/docker/jenkins_docker/data

mv /usr/local/jdk ./data
mv /usrlocal/maven ./data

我这里的映射目录为 /var/jenkins_home 根据个人目录进行填写

存储项目路径

这里设置pull下来的代码 存放的服务器及路径 前提是要有publish-over-ssh插件 前面已经安装过了

name随意 hostname填写你想要存放代码的服务器 为了方便 这里我就继续使用本机来进行操作

35.187.205.250(安装Jenkins的机器)

打开use password authentication使用ssh密码进行登录验证
点击测试 若没有创建remote directory的话 会报错

创建好后 再次进行测试

出现success即可保存设置

本地构建项目

创建项目

编写项目

java 复制代码
package com.xueyue.mytest.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @GetMapping("/repositories")
    public String test(){
        return "Hello Jenkins!";
    }
}

运行访问

push代码

写的比较繁琐 其实大家都会

使用vcs创建本地仓库

提交




拉取项目

新建任务

创建任务

源码管理

构建项目

查看控制台输出

构建项目


shell 复制代码
clean package -DskipTests #表示先清理目标文件,然后进行打包操作,但在打包过程中跳过测试执行。

点击保存 再次构建即可

使用docker运行项目


保存后再次再次进行构建 会发现jar包已经被复制到了我们的物理机的/usr/local/repositories(在存储项目路径中我们已经设置好了)

这里可以看到已经在目录下看到了我们的项目

创建docker文件夹、dockerfile、docker-compose文件

在pom.xml文件中新增finalName命名jar文件

Dockerfile

shell 复制代码
FROM java:openjdk-8u111-jre
COPY mytest.jar /usr/local
WORKDIR /usr/local
CMD java -jar mytest.jar

Docker-compose

yaml 复制代码
version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0.0
    container_name: mytest
    ports:
      - 8081:8080

对项目Send build artifacts over SSH再次进行设置

之后将项目重新git push一下 然后构建项目

很完美 这样一个简单的自动化流程就结束了

总结

笔者一直对于DevOps这种自动化流程饶有兴致

实操了一波 学到不少知识

篇幅太长了 就没有把对于代码的安全校验加上

很多插件大家可以自行探索

参考:
https://www.bilibili.com/video/BV1zk4y1N7Qh/?spm_id_from=...top_right_bar_window_history.content.click&vd_source=352711a1c3edf5811730441eadc1720a
https://www.bilibili.com/video/BV1sV4y117kK/?p=1

相关推荐
漫谈网络10 分钟前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
꧁坚持很酷꧂36 分钟前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
小诸葛的博客2 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19912 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos
BranH3 小时前
Linux系统中命令设定临时IP
linux·运维·服务器
极小狐3 小时前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
宁酱醇3 小时前
GitLab_密钥生成(SSH-key)
运维·ssh·gitlab
秋风起,再归来~3 小时前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器
Lalolander4 小时前
设备制造行业如何避免项目管理混乱?
运维·制造·工程项目管理·四算一控·epc·环保设备工程·设备制造
LucianaiB4 小时前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓