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

相关推荐
Pythonliu71 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我1 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
小O_好好学3 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥3 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
john_hjy3 小时前
11. 异步编程
运维·服务器·javascript
x晕x4 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人4 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
tangdou3690986555 小时前
两种方案手把手教你多种服务器使用tinyproxy搭建http代理
运维·后端·自动化运维
北京智和信通5 小时前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控
fasewer5 小时前
第五章 linux实战-挖矿 二
linux·运维·服务器