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
装在另一台服务器中
官网
下载
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/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