DevOps?自动化运维!

news/2024/12/4 15:26:16/

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

version: '3.6'
services:web:image: 'gitlab/gitlab-ce:latest'restart: alwaysenvironment: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 lineports:- '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'

添加全局变量

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

启动gitlab容器

docker-compose up -d

初始化设置

访问http://35.241.71.137地址后 进行登录
初始用户名:root
初始密码:cat /etc/gitlab/initial_root_password (需进入容器)

cat /etc/gitlab/initial_root_password

在这里插入图片描述
可以看到root账号密码
再次访问输入密码即可进入gitlab 及时更改密码防止忘记

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

在这里插入图片描述

Maven

装在另一台服务器中

官网

https://maven.apache.org/

下载

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也需要提前下载 但无需设置环境变量

配置

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版本即可
在这里插入图片描述

docker pull jenkins/jenkins:2.401.2-lts

启动

编写docker-compose

version: "3.1"
services:jenkins:image: jenkins/jenkins:2.401.2-ltscontainer_name: jenkinsports:- 80:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/

在这里插入图片描述

初始化设置

查看后台管理密码

docker logs -f jenkins

访问地址
http://35.187.205.250/login?from=%2F
在这里插入图片描述
输入该密码
在这里插入图片描述

安装插件

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

在这里插入图片描述
等待安装即可 出现安装错误可无视 不重要

安装完成后 下载我们用到的两个插件
Git Parameter
Publish Over SSH

在这里插入图片描述

配置maven和java

#将java和maven文件夹移动到jenkins挂载的data目录下
pwd
/usr/local/docker/jenkins_docker/datamv /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即可保存设置

在这里插入图片描述

本地构建项目

创建项目

在这里插入图片描述

编写项目

在这里插入图片描述

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创建本地仓库
在这里插入图片描述
提交
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拉取项目

在这里插入图片描述

新建任务

在这里插入图片描述

创建任务

在这里插入图片描述

源码管理

在这里插入图片描述

构建项目

在这里插入图片描述

查看控制台输出

在这里插入图片描述

构建项目

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

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

点击保存 再次构建即可
在这里插入图片描述

使用docker运行项目

在这里插入图片描述
在这里插入图片描述
保存后再次再次进行构建 会发现jar包已经被复制到了我们的物理机的/usr/local/repositories(在存储项目路径中我们已经设置好了)
在这里插入图片描述
这里可以看到已经在目录下看到了我们的项目
[图片]
创建docker文件夹、dockerfile、docker-compose文件
在pom.xml文件中新增finalName命名jar文件
在这里插入图片描述
Dockerfile

FROM java:openjdk-8u111-jre
COPY mytest.jar /usr/local
WORKDIR /usr/local
CMD java -jar mytest.jar

Docker-compose

version: '3.1'
services:mytest:build:context: ./dockerfile: Dockerfileimage: mytest:v1.0.0container_name: mytestports:- 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


http://www.ppmy.cn/news/1032097.html

相关文章

你知道什么是Curriculum Training模型吗

随着深度学习技术的飞速发展,研究人员在不断探索新的训练方法和策略,以提高模型的性能和泛化能力。其中,Curriculum Training(课程学习)模型作为一种前沿的训练方法,引起了广泛的关注和研究。本文将深入探讨…

vmalert集成钉钉告警

vmalert通过在alert.rules中配置告警规则实现告警,告警规则语法与Prometheus兼容,依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警,以下步骤: 1、构建vmalert 从源代码构建vmalert: git clone https://…

R语言实现随机生存森林(2)

library(survival) library(randomForestSRC) help(package"randomForestSRC") #构建普通的随机生存森林 data(cancer,package"survival") lung$status<-lung$status-1 rfsrc.fit1 <- rfsrc(Surv(time, status) ~ ., lung,ntree 100,block.size 1,…

数据结构---图

这里写目录标题 图的基本概念和术语基本概念和术语1基本概念和术语2 图的类型定义抽象数据类型定义二级目录二级目录 一级目录二级目录二级目录二级目录二级目录二级目录二级目录 图的基本概念和术语 基本概念和术语1 V代表顶点的有穷非空集合 E代表边的有穷集合 n为顶点 有向…

微信小程序(原生)搜索功能实现

一、效果图 二、代码 wxml <van-searchvalue"{{ keyword }}"shape"round"background"#000"placeholder"请输入关键词"use-action-slotbind:change"onChange"bind:search"onSearch"bind:clear"onClear&q…

Python——添加照片边框

原图&#xff1a; 添加边框后&#xff1a; 添加边框会读取照片的exif信息如时间、相机型号、品牌以及快门焦段等信息&#xff0c;将他们显示在下面的边框中。 获取当前py文件路径 import os #get path that py file located def Get_Currentpath():file_path os.path.abspa…

v-lazy 和 viewer.js 组合使用时,预览图失效问题解决方案

解决方案 新增自定义属性 data-origin-url <div class"img-wrp"><imgv-lazy"img.url":data-origin-url"img.url"/> </div>viewer.js 修改 options.url 属性 其中 url 支持传入 string | function const options merge({url…

提高考试成绩的有效考试培训系统

近年来&#xff0c;随着考试竞争的日益激烈&#xff0c;对于学生来说&#xff0c;提高考试成绩已成为一项重要的任务。为了帮助学生有效提升考试成绩&#xff0c;我们开发了一套全面而详细的有效的考试培训系统。 该培训系统作为一种全新的教学方法&#xff0c;力求通过提供多…