DevOps学习笔记
DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。
DevOps的好处:
·代码的提交直接触发:消除等待时间,快速反馈
·每个变化对应一个交付管道:使问题定位和调试变得简单
·全开发流程高效自动化:稳定,快速,交付结果可预测
·持续进行自动化回归测试:提升交付质量
·设施共享并按需提供:资源利用最大化
Git代码仓库
Gitlab,GitHub,Gitee
DevOps流程:
准备一台服务器安装git代码仓库
1、首先,开发人员每天进行代码提交,提交到Git仓库
2、然后,Jenkins从Gitlab中拉取项目源码,编译并打成jar包,然后构建成Docker镜像,将镜像上传到Harbor私有仓库。
3、Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉取镜像到本地,然后创建容器。
4、最后,用户可以访问到容器
服务器准备:准备4台服务器,可以使用VMWare建4台虚拟机
1、服务器1只装gitlab,专门用于存放代码
2、服务器2主要是使用jenkins进行持续集成,而向gitlab拉取代码,需要装git,向docker推送镜像,需要装docker
3、服务器3主要是用来存镜像,需要安装docker和harbor
4、服务器4主要是部署应用,由于需要向docker仓库服务器拉取镜像,所以需要装docker
一:安装gitlab
安装依赖:yum -y install policycoreutils openssh-server openssh-clients postfix
设置开机自启并启动:systemctl enable postfix && systemctl start postfix
开放ssh以及http并重新加载防火墙:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd –reload
下载安装gitlab:
wget--no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm
修改gitlab访问地址以及配置端口:
vim /etc/gitlab/gitlab.rb
external_url 'http://………
nginx['listen_port'] = …
重载配置启动gitlab:
gitlab-ctl reconfigure #此命令花时几分钟
gitlab-ctl restart
把端口添加到防火墙:
firewall-cmd --zone=public --add-port=…/tcp --permanent
firewall-cmd –reload
gitlab的基本使用
更改密码:
gitlab14安装好后,默认账户名是root,密码存放在配置文件:/etc/gitlab/initial_root_password下,这个文件将在首次执行reconfigure后24小时自动删除,此时我们拿到密码登录后修改密码
登录gitlab http地址修改密码:
在gitlab上创建用户组,创建用户并将用户添加到用户组
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交
Developer:可以克隆代码、开发、提交、push
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员
并在用户组里创建项目
在本地服务器创建项目并上传到gitlab仓库:
- .将项目提交到本地
- .配置远程仓库
- .将代码提交到远程仓库
二、准备一台服务器安装jenkins:
安装jenkins之前先安装docker容器,在docker上安装jenkins:
1.检查内核版本,返回的值大于3.10即可:
uname -r
2.更新yum(时间视网速而定),确保yum是最新的:
yum updata
4.安装 Docker。从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
移除旧的版本(如果是刚安装的纯净系统可跳过此步骤):
yum remove docker
5.安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
6.添加软件源信息:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7.更新 yum 缓存:
yum makecache fast
8.安装 Docker-ce:
yum -y install docker-ce
9.启动 Docker 后台服务:
systemctl start docker --启动
systemctl stop docker --停止
systemctl restart docker --重启
systemctl status docker --状态
systemctl enable docker --开机自启
并挂载容器目录到本地服务器目录
安装jenkins之前需要的先决条件:1)安装依赖jdk
yum install java-1.8.0-openjdk* -y
设置jdk环境变量:
# 进入容器内
docker exec -it centos bash
# 编辑环境变量
vi ~/.bashrc
# 文件末尾加入
export JAVA_HOME= 挂载目录
export PATH=$PATH:$JAVA_HOME:$JAVA_HOME/bin
# 刷新配置
source ~/.bashrc
# 查看 java 版本
java –version
2)安装maven
下载解压maven:
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xzvf apache-maven-3.6.3-bin.tar.gz
配置环境变量:
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
配置settings.xml
<profile>
<id>jdk18</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>
下载安装jenkins
修改jenkins的配置,修改端口号以及权限
重新加载配置文件:systemctl daemon-reload
启动jenkins并查看状态:systemctl start jenkins
systemctl status Jenkins
防火墙开放http服务以及相应端口号:firewall-cmd --add-service=http --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd –reload
获取jenkins原始密码并登录jenkins:
cat /var/lib/jenkins/secrets/initialAdminPassword
选择jenkins需要安装的插件
最后在web端jenkins全局配置上关联jdk和maven
为了能使jenkins有打包容器镜像的权限,将jenkins的 .smock文件权限改为root权限
三、jenkins构建镜像上传到镜像仓库,再由生产服务器从镜像仓库拉去镜像进行部署
需要在pom.xml文件中添加dockerfile插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.7</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
并且在项目根目录下编写dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/app.jar"]
文本说明:
from :定义了起始镜像
arg:定义了项目打包后生成的FILE参数,此参数与上面pom.xml的<JAR_FILE>对应
COPY:将项目打包好的JAR文件拷贝到当前工作目录下的app.jar
EXPOSE:暴露8080端口
ENTRYPOINT:相当于执行:java -jar app.jar启动项目