基于centos7+docker+jenkins+svn搭建持续集成平台
资源版本控制服务器
每一次操作都有数据可查,使得代码无论如何都可以回到可用状态
相比git,提交代码不需要审核,但是每次提交前需要更新代码以免和别人冲突,冲突后需要本地进行合并冲突,否则无法提交
代码全部保存在服务器中,每次提交必须保存到集中式的服务器仓库中
开源的linux系统,是企业最常用的系统
独特的yum命令使得使用更加方便
与ubuntu相比,centos更加稳定
因为项目依赖和公共模块需要放到私有库(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
非常轻量级的容器化技术
通过dockerfile创建镜像,通过aufs保存容器的文件层,通过共享宿主机内核实现零损耗
可扩展的持续集成引擎,简称CI
能够根据指定规则从指定位置拉取代码并编译使其运行起来的服务(“自动化”编译、打包、分发部署),构建可用: ant、maven、gradle,代码拉取可用: svn、git
集群架构方式: server+slave
官方: https://jenkins.io/zh/
人工操作的失败率和效率远远比不上自动化
明明可以自动化何不节省一比运维成本呢
这样就必须要依靠自动化工具才能实现,将硬件的操作软件化
部署节点数量剧增
安装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
参考文档:
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中
在官方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实战 |