持续集成-从入门到xxx

简介

基于centos7+docker+jenkins+svn搭建持续集成平台

svn

资源版本控制服务器

每一次操作都有数据可查,使得代码无论如何都可以回到可用状态

相比git,提交代码不需要审核,但是每次提交前需要更新代码以免和别人冲突,冲突后需要本地进行合并冲突,否则无法提交

代码全部保存在服务器中,每次提交必须保存到集中式的服务器仓库中

centos7

开源的linux系统,是企业最常用的系统

独特的yum命令使得使用更加方便

与ubuntu相比,centos更加稳定

maven

因为项目依赖和公共模块需要放到私有库(nexus)中

nexus

maven的私有仓库,专门用来提高maven下载速度和保存内部项目依赖

搭建: 参考文档: https://hub.docker.com/r/sonatype/nexus3

# 拉取镜像
docker pull sonatype/nexus3

# 创建本地文件夹
mkdir -p /tristan/nexus

# 启动容器
docker run -d -p 8081:8081 --name mynexus -v /tristan/nexus:/nexus-data sonatype/nexus3

docker

非常轻量级的容器化技术

通过dockerfile创建镜像,通过aufs保存容器的文件层,通过共享宿主机内核实现零损耗

jenkins

jenkins是什么

可扩展的持续集成引擎,简称CI

能够根据指定规则从指定位置拉取代码并编译使其运行起来的服务(“自动化”编译、打包、分发部署),构建可用: ant、maven、gradle,代码拉取可用: svn、git

集群架构方式: server+slave

官方: https://jenkins.io/zh/

为什么需要jenkins

传统运维的问题

人工操作的失败率和效率远远比不上自动化

明明可以自动化何不节省一比运维成本呢

devOps

这样就必须要依靠自动化工具才能实现,将硬件的操作软件化

分布式、微服务、容器化带来的问题

部署节点数量剧增

怎么搭建jenkins

docker方式搭建

安装docker:

​ 参考文档: https://docs.docker.com/install/linux/docker-ce/centos/

# 移除掉原来安装的docker
yum -y remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 安装依赖软件
yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# 配置docker的yum仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
# 启用仓库的文件
yum-config-manager --enable docker-ce-nightly

# 安装docker-ce
yum install -y docker-ce docker-ce-cli containerd.io

# 启动docker
systemctl start docker

# 允许开机自启
systemctl enable docker

# 运行一个demo镜像
docker run hello-world

设置镜像加速:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://q4jtpmzm.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

参考文档: https://jenkins.io/zh/doc/book/installing/

拉取jenkins镜像、创建文件夹并运行镜像

docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /tristan/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name myjenkins \
  jenkinsci/blueocean

进入容器并拷贝Administrator password:

docker logs -f my-jenkins

# 拷贝:
# 510f3522a35d42b5b5a61dee5bd3bdd3

使用jenkins

简单官方案例

参考文档:

https://jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/#为你的流水线增加deliver阶段

新建一个任务 new task

配置这个流水线的pipleline文件来自 资源控制管理服务器

从github fork一个简单的工程:

​ 在github中fork jenkins-docs/simple-java-maven-app

配置jenkins指向该仓库,注意地址要带.git后缀

​ Pipeline

​ Definition: ->Pipeline script from SCM

​ SCM: ->Git

​ Repository:

​ Repository URL: https://github.com/tristan-tsl/simple-java-maven-app.git

​ Credentials:

​ 点击Add 添加一个认证

​ 下拉选择一个认证

​ Branches to build:

​ Branch Specifier(blank for ‘any’): */master

​ 点击 Add

​ Script Path(脚本文件路径): jenkins/Jenkinsfile

在dashboard中启动该任务,点击打开 blue ocean中

部署springboot工程

在官方demo的基础上

修改pom.xml:

jar

修改Jenkinsfile文件 :

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2 -p 8081:8081'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }

        stage('Deliver') {
            steps {
                sh './jenkins/scripts/deliver.sh'
            }
        }
    }
}

服务器管理

查看服务器系统类型和版本:

cat /etc/redhat-release

清理内存:

echo 2 > /proc/sys/vm/drop_caches

参考资料

链接 描述
https://jenkins.io/zh/doc/pipeline/tour/getting-started/ jenkins官方文档
https://docs.docker.com/install/linux/docker-ce/centos/ docker官方文档
https://blog.51cto.com/lizhenliang/2159817 Jenkins与Docker的自动化CI/CD实战

你可能感兴趣的:(架构师成长之路)