持续集成
频繁的将代码提交到主干(重复的进行集成工作),代码提交到主干前先进行自动化测试。
持续集成的优点
1、快速发现错误;2.节省人力成本;3.加快软件开发速度;4.实时交付;5.防止分支大幅偏离主干
持续集成的目的
产品快速迭代,还能保证产品质量。
简化工作流程
持续交付
持续交付是在持续集成环境的基础上,将代码手动部署到预生产环境。
持续交付:代码开发-》单元测试-》合并代码-》测试-》手动部署到生产
持续部署
持续部署:在持续交付的基础上 自动将代码部署到生产环境
持续部署:代码开发-》单元测试-》合并代码-》测试-》自动部署到生产
持续集成实施流程
提交代码-》代码托管-》获取代码-》代码测试-》构建-》黑盒测试-》部署-》回退
jenkins
开源的持续集成工具,由java开发而成。
调度平台,本身不处理任何事情,调用插件完成所有的工作。
主要功能:提供软件开发的持续集成服务
主要特点:配合实现 软件配置管理、持续集成功能、拥有成千上万的插件
jenkins官网
https://www.jenkins.io/zh/doc/
win10安装jenkins
使用docker安装jenkins,前提 已安装好docker
1、拉取jenkins并运行
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
2、浏览到 http://localhost:8080(或安装时为Jenkins配置的任何端口),并等待 解锁 Jenkins 页面出现。
3、从jenkins日志中获取秘密
docker logs 容器_id
4、解锁jenkins并选择安装推荐插件
遇到问题:提示插件不存在 No such plugin: cloudbees-folder
解决:重启容器 docker restart 容器_id,没有安装任何插件
配置admin密码
新启动的jenkins没有配置账号密码
打开admin->configure 设置密码和确认密码,点击提交
jenkins相关插件下载地址
https://mirror.tuna.tsinghua.edu.cn/jenkins/
加速插件配置
使用国内的网站下载插件,加快下载速度
1、打开 清华大学yum https://mirror.tuna.tsinghua.edu.cn/,找到jenkins->updates->update-center.json
2、jenkins->manage jenkins-> manage plugins->advanced->Update Site 填写https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
安装插件
方法一:
1、打开jenkins->manage jenkins-> manage plugins->Available
2、搜索要用的插件,选择并安装
一般不使用这种方法,因为下载安装太慢
方法二:
1、从https://mirror.tuna.tsinghua.edu.cn/jenkins/下载相关插件
2、jenkins->manage jenkins-> manage plugins->advanced->Upload Plugin 选择下载的插件并开始安装
方法三:
将下载的插件放到/var/lib/jenkins/plugins下
给插件设置可读权限
要注意版本问题
创建自由风格的软件项目
Description 描述
Discard old builds 丢弃旧的构建
Days to keep builds 多少天后丢弃
Max # of builds to keep 最多保留多少次构建
This project is parameterized 参数化构建
Build 构建
Execute shell 执行shell命令
点击【Build Now】 立即构建
jenkins集成gitlib
1、将gitlib上的项目获取到本地,为后续网站的代码发布发布工作做准备。jenkins只是一个调度平台,需安装gitlib相关的插件来帮忙将项目获取到本地。
2、安装与gitlib相关的插件
jenkins配置git源码管理,拉取最新代码
前置条件:下载安装jenkins的git插件:Git plugin
1、新建一个jenkins项目-》选择构建一个自由风格的软件项目-》源码管理选择git
2、填写git选项
(1)repositories 仓库 设置
Repository URL :用ssh格式的仓库地址
Credentials:资格设置,git插件下载gitlib代码时免密钥。
有两种方式,一种是配置以git用户名和密码,另外一种是使用密钥对的方式
a.以git用户名和密码
用户是拥有git仓库Master或者Owner权限的用户
b.使用密钥对的方式
需输入 Username 和 Private Key
配置过程:
aa. jenkins管理员用户登录jenkins服务器 生成SSH Key
ssh-keygen -t rsa -f ~/.ssh/jenkins
-t rsa是指定秘钥的类型
生成密钥对为key (私钥) 和 key.pub(公钥)
bb. gitlib管理员登录gitlib,将公钥放到http://git.ssas.com/profile/keys的Add an SSH key 中(登录gitlib的账号必须有Master或者Owner权限)
dd. 私钥配置在jenkins上。点击add
说明:实际使用时,运营OP已经配置好了密钥,我们只需要在jenkins 中选择Credentials,在gitlib http://git.bbb.com/gsx-qa/demo/deploy_keys 中使用master权限的账户 enable下已添加的密钥。
(2)Branches to build 设置要下载的分支
3、提交项目并执行,在控制台日志输出(Console Output)中会打印拉代码的过程
4、在jenkins项目的Workspace中可以看到已拉取的代码;代码保存在jenkins所在服务的/var/jenkins_home/workspace/下。
jenkins拉取指定tag的代码
前提:1、rd提交代码打了tag;2、jenkins脚本支持传参;3、安装git paramter插件
1、编辑项目,选择参数化构建->选择git paramter->名称:变量git_tag->描述->参数类型:选择tag->默认值origin/master
2、源码管理->git ->指定分支:修改为变量,${git_tag}
jenkins实现集群架构代码自动上线
1、手动搭建nginx集群架构
2、开发将代码提交至gitlib,git插件将代码拉取到jenkins的workspace目录下
3、编写shell脚本,并由jenkins调取推送至web服务器组。
执行脚本 sh -x /http.sh
http.sh脚本内容:
#!/usr/bin/bash
DATE=$(date+%Y-%m-%d-%H-%M-%S)
web_server = "10.0.0.7 10.0.0.8"
#进入项目目录,将内容进行打包
get_code(){
cd /var/lib/jenkins-home/workspace/demo
tar czf /opt/web-${DATE}.tar.gz ./*
}
#将内容通过scp拷贝到web集群组
scp_web_service(){
for i in $web_server
do
scp /opt/web-${DATE}.tar.gz root@${i}:/opt
ssh root@${i} "mkdir -p /code/web-${DATE} \
&& tar xf /opt/web-${DATE}.tar.gz -C /code/web-${DATE} \
&& rm -rf /code/web
&& ln -s /code/web-${DATE} /code/web"
done
}
deploy(){
get_code
scp_web_service
}
deploy
jenkins实现git版本回退
在webserver集群主机上进行软链接建立 和重新建立软链接
1、编辑项目,选择参数化构建->选择选项参数->名称:deploy_env->选项:deploy rollback ->描述:选择部署还是回退
2、修改shell脚本使支持回退
#!/usr/bin/bash
DATE=$(date+%Y-%m-%d-%H-%M-%S)
web_server = "10.0.0.7 10.0.0.8"
#进入项目目录,将内容进行打包
get_code(){
cd /var/lib/jenkins-home/workspace/demo
tar czf /opt/web-${DATE}.tar.gz ./*
}
#将内容通过scp拷贝到web集群组
scp_web_service(){
for i in $web_server
do
scp /opt/web-${DATE}.tar.gz root@${i}:/opt
ssh root@${i} "mkdir -p /code/web-${DATE} \
&& tar xf /opt/web-${DATE}.tar.gz -C / code/web-${DATE} \
&& rm -rf /code/web
&& ln -s /code/web-${DATE} /code/web"
done
}
#回退执行
roolback(){
back_file = $(ssh root@10.0.0.7 “find /code/ -maxdepth 1 -type d -name “web-*-${git_tag}””)
for i in $web_server
do
ssh root@${i} "
rm -rf /code/web \
&& ln -s /code/${back_file} /code/web"
done
}
# 部署指定版本
deploy(){
get_code
scp_web_service
}
If [$deploy_env=“rollback”]; then
roolback
elif [$deploy_env=“deploy”];then
deploy
fi
jenkins实现集群架构代码自动上线重复构建问题
jenkins自带可用的环境变量GIT_COMMIT 记录版本的commit_id;GIT_PREVIOUS_SUCCESSFUL_COMMIT记录上次构建成功的commit_id
如果GIT_COMMIT = GIT_PREVIOUS_SUCCESSFUL_COMMIT,说明已经构建过了,不可再重新构建。
If [$deploy_env=“rollback”]; then
roolback
elif [$deploy_env=“deploy”];then
if [$(GIT_COMMIT)==$(GIT_PREVIOUS_SUCCESSFUL_COMMIT)]; then
echo “已部署过该版本”
exit 1
else
deploy
fi
jenkins集成Maven
1、安装Maven Integration plugin,才能使用jenkins构建Maven项目
2、在jenkins上指定maven的位置
jenkins -> 全局配置 -> JDK 配置 名字和JAVA_HOME-> MAVEN配置 名字和MAVEN_HOME
3、新建项目,选择构建一个maven项目
4、填写描述->丢弃旧的构建 :最多保持10次构建-> 源码管理git配置 -> build 构建参数package -Dmaven.test.skip=true(由RD提供) ->
5、jenkins将代码拉取到本地后通过Maven构建代码生成war包。
jenkins集成SonarQube并集成项目自动检测
一、jenkins安装SonarQube Scanner for Jenkins插件
二、配置SonarQube服务端地址
系统管理-》系统配置-》sonarqube->name->service url :填写sonarqube service地址->token->类型:secret text->secret->描述
三、配置SonarQube Scanner工具路径
系统管理-》全局工具配置-》SonarQube Scanner-》name->home:scanner安装路径
四、修改项目
扫描代码配置有很多方法:
A. 发布版本前执行sonarqube操作
构建->增加构建操作->execute sonarqube scanner -》analysis properties:参数(其他不需要填写)
sonar.projectName=${JOB_NAME} #项目再sonar平台上显示的名称
sonar.projectKey=java # 项目类型
sonar.sources=. # 项目目录
B.写shell脚本
# 进入项目目录下
cd /var/lib/jenkins/workspace/gsxpt_test_demo1
# 扫描代码
sonar-scanner -Dsonar.projectKey=gsxpt_test_demo1 -Dsonar.sources=.
jenkins maven项目实现代码质检
方法一:使用SonarQube Scanner
方法二:使用maven质检
pre steps(构建前操作)->
clean
verify
vonnar:sonnar
jenkins集成钉钉
1、安装钉钉Plugin
2、编辑项目,选择构建后的操作->钉钉通知->输入钉钉token-》选择通知时间
构建触发器 Build when a change is pushed to GitLab
只要有代码提交到当前分支上就触发构建过程
操作:1、源码管理配置
2、勾选Build when a change is pushed to GitLab,并记住GitLab webhook URL
3、打开高级设置,生成Secret token ,
4、登录gitlib ,打开Webhooks http://git.aaa.com/gsx-qa/demo/hooks,配置webhook URL 和Secret token,保存
5、本地修改代码也并提交,出发构建。
jenkins 配置GitLab插件
参考地址:https://yq.aliyun.com/articles/618062
1、打开GitLab网站->个人设置->setting->Account->复制Private token
2、登录Jenkins Web UI-》点击系统管理->再点击系统设置->点击左上角导航配置下拉框->点击Gitlab选项
a, Connection Name随便填;
b, Git Host URL填GitLab的域名地址,例如http://gitlab.yourdomain.com/;
c, Credentials配置;
点击Add下拉框,点击jenkins;弹出框里,kind选择GitLab API Token,将之前复制备用的Private token粘贴到API token输入框中,然后点击添加:
3、选择刚刚新建的Credentials,测试一下能否连接成功,点击Test connection,正常应该返回Success
4、完成后点击页面底部的应用,再点击保存。
注意:如果测试连接不成功,通常是当前节点不能解析gitlab.yourdomain.com域名导致的,设置正确的DNS或者hosts即可。
jenkins分布式构建
pipeline流水线
1、pipeline将开发部署环境生态链的每一步通过流水线串联起来,并代码化,使得一键将本地代码发布到测试环境进行测试发布,最终实现持续集成持续部署。
配置流水线
方法一:直接写pipeline脚本
方法二:写jenkinsfile,并将文件放到git仓库 项目的根目录下
pipeline语法
pipeline {
agent:any
enviroments{}
// 任务集合
stages{
stage(‘获取代码'){
steps{
echo "第一步”
echo”第二步"
}
}
stage(‘代码测试'){
steps{
withSonarQubeEnv(’SonarQube’){ //SonarQube这个要和在jenkins中配置的服务器名称保持一致。
echo "第一步”
echo”第二步”
}
script{
timeout(1){
def qg=waitForQualityGate()
if(qg.status!=‘ok’){
error “未通过代码检查,请及时修改代码"
}
}
}
}
}
}
post {
// 通知
}
}