基于JenkinsPipeline+github+docker持续集成CICD环境搭建过程
声明:部分截图来⾃于⽹络
背景
略
预期⽬标
通过Jenkins Pipeline + github + docker,实现代码提交以后⾃动触发环境搭建和测试流程,包括拉取代码、构建镜像、测试镜像、发布镜像、远程部署镜像、回归测试等⾃动化流程。可以实现开发同学在提交代码后的⾃动化测试流程,并且测试环境的可移植性较强,受⼈为因素影响程度较低,整个流程的⾃动化程度较⾼,且环境稳定性较⾼。在此基础上,未来⽬标是可以实现测试环境可配置化,提升各个测试环境的定制化程度和灵活性。
展⽰⼀张最终效果截图:
软硬件依赖环境
1.硬件环境
硬件环境⽤途描述服务器 1jenkins服务的宿主机 centos 7以上,⽤于安装、运⾏Jenkins相关服务和插件
服务器 2测试环境的宿主机 centos 7以上,⽤于模拟在远程机器部署测试环境
2.软件环境
软件环境⽤途描述
docker运⾏Jenkins服务的容器基于Docker环境的Jenkins服务的搭建,对系统依赖程度较低,对系统的污染最低Jenkins配置基于Jenkins Pipeline的流⽔线任务基于Jenkins Pipeline,完成对github、docker插件的集成
3.插件环境
插件环境⽤途描述
Pipeline Jenkins流⽔线,使⽤脚本实现整个应⽤的下载、编
译、测试、发布等流程
基于Jenkinsfile,定义若⼲stage和steps来完成代码拉取、编译、构建、测试、
发布、远程部署等⾃动化流程
Pipeline:
Stage View
构建复杂流⽔线的可视化⼯具⽅便查看每个版本,每个阶段的执⾏状态和⽇志
Blue Ocean构建复杂流⽔线的可视化⼯具重新设计的Jenkins Pipeline,快速只管的查看每个阶段的执⾏状态和⽇志SSH Plugin使⽤SSH协议执⾏远程shell命令
docker build
step
⾃动化管理docker
github管理github代码提供github代码库管理功能;在Jenkins服务端提供github-webhook接⼝,⽤
于实现代码提交以后的通知机制
4.外部其他环境
其他环境⽤途描述
github整个Pipeline的触发起点当有代码提交动作和分⽀合并动作时,实时推送给Jenkins Pipeline,触发Pipeline任务的构建hub.docker⽤于维护镜像管理基于Dockerfile的镜像构建、拉取和推送
搭建步骤及过程
安装Jenkins & docker
初始化管理员⽤户
添加admin⽤户
adduser admin
passwd admin
给admin⽤户设置sudo权限
vi /etc/sudoers
# 添加下⾯⼀⾏配置
admin ALL=(ALL) ALL
切换到admin⽤户,后续操作都在admin⽤户下执⾏
sudo su admin
安装docker-ce(基于centos的安装过程)
安装必要的系统⼯具
s udo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源
s udo yum-config-manager --add-repo mirrors.aliyun/docker-ce/linux/po 执⾏安装
sudo yum install docker-ce docker-ce-cli containerd.io
启动docker
s udo service docker start
配置docker
修改/etc/docker/daemon.json,添加国内镜像地址,修改本地默认docker graph地址
{
"registry-mirrors": ["xisih51q.mirror.aliyuncs"],
"graph": "/home/admin/tools/docker"
}
重启docker
s udo service docker restart
查看配置是否⽣效(需要使⽤root账号执⾏)
d ocker info
配置docker使⽤⾮root账号
添加docker组
s udo groupadd docker
在docker组中添加当前⽤户
s udo usermod -aG docker $USER
更新docker组
newgrp docker
查看配置⽣效(⾮root⽤户执⾏)
docker info
拉取并启动jenkins镜像
通过docker run命令拉取并启动jenkins镜像
d ocker run -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_hom
e -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean --name jen kins-blueocean
d ocker exec -it jenkins-blueocean /bin/bash
访问jenkins以及初始化
访问jenkins主页
47.93.193.48:8080/
安装推荐插件
配置Pipeline
Pipeline相关概念
什么是Pipeline?
按照官⽅给出的解释是:将持续集成实现和实施集成到jenkins中;流⽔线的定义被写在⼀个⽂本⽂件中(Jenkinsfile),该⽂件被提交到github仓库中(这是流⽔线即代码的基础),将CD流⽔线作为应⽤程序的⼀部分
⼀个标准CD场景的流程图
Pipeline语法:
创建Jenkinsfile并提交到源代码中的优点:
⾃动为所有分⽀创建流⽔线构建过程,并拉取请求
在流⽔线上代码复查、迭代
对流⽔线进⾏审计跟踪
该流⽔线的代码,可以被项⽬多个成员查看和编辑
Jenkinsfile相关介绍
概念:⽤户定义的⼀个CD流⽔线模型,流⽔线的代码定义了整个构建过程,包括构建、测试和交付等阶段
node(节点):是⼀个机器,它是jenkins还击的⼀部分
stage(阶段):stage块定义了整个流⽔线的执⾏任务的不同的⼦集(⽐如Build、Test、Deploy等)
steps(步骤):⼀个单⼀的任务,⼀个step告诉jenkins在特定的时间点要做什么。例如:要执⾏shell命令,使⽤sh步骤:sh ‘make’
定义⼀个Jenkinsfile:
Pipeline配置过程
点击Jenkins中的New Item菜单
为新⼯程起⼀个名字(例如mypipeline),选择Mulitibranch Pipeline
点击Add Source按钮,添加github仓库地址
github配置,⽣成token
进⼊github --> setting --> Developer settings --> Personal Access Token --> Generate new token
N ote:finalbattle
勾选repo和admin:repo_hook两个选项
点击保存,会⽣成⼀个token
持续集成的概念github webhook配置(如果部署的Jenkins在外⽹可以访问,此步骤可忽略)
下载ngrok
wget h ttps://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
启动ngrok
./ngrok http 8080(注:指定的8080端⼝是jenkins启动所占⽤的端⼝)
⽣成k.io
S ession Status online
Session Expires 7 hours, 31 minutes
Version 2.3.35
Region United States (us)
Web Interface 127.0.0.1:4040
Forwarding k.io -> localhost:8080
Forwarding k.io -> localhost:8080
Connections ttl opn rt1 rt5 p50 p90
1 0 0.00 0.00 7.63 7.63
HTTP Requests
-------------
POST /github-webhook/ 200 OK
进⼊GitHub上指定的项⽬ --> setting --> WebHooks --> add webhook
#填写⽣成好的ngrok地址:
k.io/github-webhook/
在jenkins中配置github plugin
j enkins系统管理 --> 系统设置 --> GitHub --> Add GitHub Sever
添加Credentials(凭证提供者)配置
D omain:Global credentials(unrestricted)
kind:Secret text
Secret:c2***********************************ba
I D: github_token
D escription: github_token
点击⾼级配置 →勾选【覆盖 HOOK URL】
点击连接测试,出现Credentials verified for user xxxxx, rate limit: xxxx,说明连接测试成功
配置mypipeline中的分⽀源
在github代码库中添加⼀个Jenkinsfile⽂件
pipeline {
agent {
docker {
image 'python:3.5.2'
args '-v $HOME/tools/docker'
}
}
stages {
stage('build') {
steps {
sh 'python --version'
}
}
stage('Test') {
steps {
sh 'python --version'
}
}
}
}
添加⼀个token(注:多分⽀⾥的token由于只⽀持⽤户名和密码,其他⽅式的token会被过滤掉)
⽤户名:finalbattle
密码:*********
ID:github_token_user_passwd
Description:github_token_user_passwd
添加github地址
h ttps://github/finalbattle/templates.git
⾄此,⼀个简单的Jenkins Pipeline已经搭建起来,可以正常运⾏
修改代码库中的Jenkinsfile
node {
// 定义环境变量
def app
def myRepo = checkout scm
def gitCommit = myRepo.GIT_COMMIT
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论