Jenkins+Ant+Gitlab+Sonarqube+Docker实现持续集成,质量管理
Posted 倾听小糖宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins+Ant+Gitlab+Sonarqube+Docker实现持续集成,质量管理相关的知识,希望对你有一定的参考价值。
【背景】- 实际开发代码管理比较混乱,缺乏统一的集中管理。
- 部署升级纯手工,流程重复繁琐,容易出错。
- 代码质量没有管理,对于基本错误不能在第一时间发现。
- 针对以上情况,采取git管理代码,搭建企业内部自己的gitlab来管理上传代码。
- 使用jenkins从gitlab拉取代码并进行编译,持续构建发布。
- 采取jenkins的插件sonar scanne分析源码,将结果上传到sonarqube进行质量分析。
Gitlab : 192.168.159.148
Jenkins: 192.168.159.149
SonarQube:192.168.159.150
Web应用: 192.168.159.153 (模拟一台web应用服务器)
【搭建过程】
一、Gitlab
1.1 Gitlab是什么
是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
基础功能免费,高级功能收费
1.2. 为什么要使用Gitlab
- 基础功能开源,可自行搭建
- 可以进行权限控制,使得代码对部分人可见
- gitlab使用方便,非常适合企业内部使用
yum install vim lrzsz wget unzip zip -y
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.4-ce.0.el7.x86_64.rpm
yum localinstall gitlab-ce-12.0.4-ce.0.el7.x86_64.rpm
看到如下界面,代表安装成功:
vim /etc/gitlab/gitlab.rb
#修改external_url为gitlab主机的ip+要使用的端口
如:http://192.168.159.148:8888
#修改nginx[\'listen_port\'] = 8888
#重新配置
gitlab gitlab-ctl reconfigure
看到如下信息代表重新加载成功
重启
gitlab-ctl restart
看到如下信息代表启动成功
浏览器访问:192.168.159.148:8888即可访问
1.4 汉化
为了方便使用,可以采用汉化包来对gitlab进行汉化处理。
cd /usr/local/src
#克隆汉化补丁仓库
git clone https://gitlab.com/xhang/gitlab.git cd /usr/local/src/gitlab
#获取对应版本的中文补丁
git diff v12.0.4 v12.0.4-zh > ../12.0.4-zh.diff
#将中文补丁导入
gitlab patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 12.0.4-zh.diff
此时会出现如下页面,一路回车即可。
执行完毕后,重启gitlab查看
gitlab-ctl start
浏览器查看发现已经汉化完成。
1.5 配置邮箱
修改gitlab配置
vim /etc/gitlab/gitlab.rb
找到下面这一串文本,进行修改
gitlab_rails[\'smtp_enable\'] = true
gitlab_rails[\'smtp_address\'] = "smtp.qq.com" //以qq邮箱举例
gitlab_rails[\'smtp_port\'] = 465
gitlab_rails[\'smtp_user_name\'] = "xxxxx@qq.com"
gitlab_rails[\'smtp_password\'] = "开通smtp时返回的字符"
gitlab_rails[\'smtp_domain\'] = "qq.com"
gitlab_rails[\'smtp_authentication\'] = "login"
gitlab_rails[\'smtp_enable_starttls_auto\'] = true
gitlab_rails[\'smtp_tls\'] = true
user[\'git_user_email\'] = "xxxxx@qq.com"
gitlab_rails[\'gitlab_email_from\'] = \'xxxxx@qq.com\'
#重新加载配置与启动
gitlab-ctl reconfigure
gitlad-ctl start
测试邮件服务是否正常
gitlab-rails console
Notify.test_email(\'接收方邮件地址\',\'邮件标题\',\'邮件内容\').deliver_now
按回车,测试发送
例如
Notify.test_email(\'1345098802@qq.com\',\'test\',\'hello\').deliver_now
二、安装Jenkins
2.1 Jenkins是java语言开发的,需要jdk和tomcat,这两个安装和配置这里就不再描述。
官方网站: https://jenkins.io/zh/
2.2 直接将下载的war包放在tomcat目录webapps下面即可,启动tomcat即可。
2.3 启动后浏览器访问,进入jenkins初始化页面:
http://192.168.159.149:8080/jenkins
按照提示来安装即可。
先选择推荐安装的插件即可,以后需要什么再安装什么。
根据提示设置好第一个管理员账号后,可以看到如下界面,表示已安装成功。
三、安装Sonarqube
SonarQube 需要数据库的支持,用于存储检测项目后的分析数据,同时为了实现可持续监测,还需要持续集成工具(如Jenkins)的支持,在构建版本前,通过Jenkins+Sonar 插件执行项目分析指令,最终的结果会通过SonarQube 服务器的Web 页面展示。下图是使用SonarQube做代码持续审查的流程图:
开发人员把代码push到SCM(如gitlab)【上图第2步】,jenkins构建定义好的job,然后通过jenkins 插件(sonar scanner)分析源码【上图第3步】,jenkins把分析报告发到sonarqube server【上图第4步】。
前置依赖:注意安装sonarqube时,需要看一下官网版本需要依赖哪些东西,本文采用sonarqube6.7版本,支持的mysql是5.6和5.7版本。
mysql 5.6 or 5.7
jdk 1.8
jdk安装这里就不记录了,主要记录一下mysql安装,以mysql5.6.45为例
3.1 源码编译安装mysql
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake ncurses ncurses-devel
useradd -s /sbin/nologin mysql #创建mysql用户用于启动
cd /usr/local/src
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.45.tar.gz
tar -zxvf mysql-5.6.45.tar.gz
cd mysql-5.6.45
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_DEBUG=0 -DWITH_SSL=yes -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1
make && make install
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
编译选项说明
CMACK_INSTALL_PREFIX指定安装的目录
MYSQL_DATADIR指定Mysql的数据目录
mysql环境变量配置 etc/profile
export PATH=$PATH:/usr/local/mysql/bin/
3.2 更新mysql配置/etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
datadir=/data/mysql
user=mysql
skip-name-resolve
slow_query_log=1 #开启慢sql记录,0为关闭,1为开启
long_query_time=2
slow_query_log_file=/data/mysql/mysql-slow.log
expire_logs_days=2
innodb-file-per-table=1
innodb_flush_log_at_trx_commit = 2
log=/data/mysql/mysql.log
log_warnings = 1
max_allowed_packet = 512M
connect_timeout = 60
net_read_timeout = 120
[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
mysql数据库初始化
mkdir -pv /data/mysql //创建数据目录
chown -R mysql:mysql /usr/local/mysql /data/mysql/ //赋权
yum install -y perl-Module-Install
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/data/mysql/ //初始化数据
使用systemctl管理mysqld,/usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
[Install]
WantedBy=multi-user.target
#启动mysql验证
systemctl start mysqld
3.3 下载(安装不同版本时候去官网看一下都需要哪些要求)
https://www.sonarqube.org/
如图所示:sonarqube的6.7版本需要支持Jdk8版本,Mysql的话需要5.6或者5.7版本。
3.4 安装unzip并解压sonarqube并移动到/usr/local
yum install unzip -y
unzip sonarqube-6.7.7.zip
mv sonarqube-6.7.7 /usr/local/
3.5 mysql里新增数据库
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
3.6 修改sonarqube相应的配置
vim /usr/local/sonarqube-6.7.7/conf/sonar.properties
sonar.jdbc.username=root //数据库用户名
sonar.jdbc.password=123456 //密码
sonar.jdbc.url=jdbc:mysql://192.168.159.150:3306/sonar?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
sonar.web.context=/sonar
sonar.web.host=0.0.0.0
3.7 新增用户,并将目录所属权赋予该用户
useradd -s sbin/nologin/ sonar #添加一个启动sonar的用户,不允许其登录
chown -R sonar:sonar sonarqube-6.7.7/
3.8 启动
su - soanr -s /bin/bash #切换sonar用户启动
/usr/local/sonarqube-6.7.7/bin/linux-x86-64/sonar.sh start
3.9 界面访问
http://192.168.159.150:9000/sonar
3.10 汉化
https://github.com/SonarQubeCommunity/sonar-l10n-zh
在该地址查看自己的版本所对应的汉化包版本,下载对应的汉化包jar,我这里用的是6.7.7版本,对应的汉化包版本是1.19。
下载的jar包放到这个目录下,然后重启sonarqube
/usr/local/sonarqube-6.7.7/extensions/plugins
浏览器观察,发现已经汉化完成,默认登录账号密码为:admin/admin
四、总体配置
4.1 环境配置
jenkins服务器安装java编译环境ant
https://ant.apache.org/
#下载ant装包
wget https://archive.apache.org/dist/ant/source/apache-ant-1.9.13-src.tar.gz
tar -xzvf apache-ant-1.9.13-src.tar.gz
cd apache-ant-1.9.13
sh build.sh
sh bootstrap.sh
mkdir -pv /usr/local/ant/
cd dist
cp -r bin /usr/local/ant
cp -r lib /usr/local/ant
vim etc/profile
#添加环境变量
export ANT_HOME=/usr/local/ant/
export PATH=$PATH:$ANT_HOME/bin
source etc/profile
验证
ant -version
4.2 Jenkins安装所需插件
安装支持sonarqube的插件
安装gitbab插件,安装publish over ssh
4.3 系统配置:
系统管理--》全局工具配置
1、配置jdk,ant,sonrqube scanner ,ssh
sonarqube scanner选用默认安装即可
pubulish over ssh设置,采用ssh方式登录,按照如下设置,设置完之后,点击测试查看结果是否成功。
2、配置sonar
sonarqube登录,点击配置--》权限--》用户,点击生成token
随便输入一个标识,例如输入jenkins,生成一个token,复制该token
jenkins设置:
添加凭据,添加secert text类型,此种类型一般保存的是一些access token,例如gitlab或者sonar等,添加sonar的token。
管理jenkins---》Configure System--》sonarQube server设置
3、配置gitlab授权
Credentials--》system--》Global credentials
添加一个ssh登录,输入用户名即可,最好使用启动jenkins的用户设置,比如本文的tomcat使用jenkins用户启动的,所以username输入的是jenkins,private key输入秘钥中/home/jenkins/.ssh/id_rsa中内容
4、配置免密登陆,允许jenkins从gitlab中拉取代码。
jenkins服务器登录输入
ssh-keygen -t rsa -- 产生私钥
本文中服务器的tomcat使用jenkins用户启动的
配置git登陆
将Jenkins所在机子的公钥 cat home/jenkins/.ssh/id_rsa.pub 的内容拷贝到gitlab项目上
4.4 gitlab设置
将上一步公钥的内容复制到这里,用户设置--》SSH秘钥
验证一下配置是否正确
jenkins中配置如下,这里使用仓库方式为ssh方式,如果没有提示报错,即代表jenkins与gitlab配置正确,这里我们选择从git的master分支拉取代码。
4.5 构建ant配置:增加构建步骤,选择Invoke Ant
指定构建build.xml
附录:本例中build.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个工程,默认任务为warFile。 -->
<project name="WebDemo" default="warFile" basedir=".">
<!-- 定义属性,打成war包的名称。 -->
<property name="warFileName" value="webdemo.war"></property>
<!-- 定义路径,编译java文件时用到的jar包。 -->
<path >
<fileset dir="${basedir}/WebRoot/WEB-INF/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 -->
<target name="clean">
<delete dir="${basedir}/build" />
<mkdir dir="${basedir}/build" />
</target>
<!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到创建的文件夹下。 -->
<target name="compile" depends="clean">
<javac srcdir="${basedir}/src" destdir="${basedir}/build" includeantruntime="false">
<classpath ref>
</classpath>
</javac>
</target>
<!-- 定义默认任务,将class文件集合成jar包。 -->
<target name="warFile" depends="compile">
<!-- 删除原有war包。 -->
<delete dir="${basedir}/${warFileName}" />
<!-- 建立新war包。 -->
<war destfile="${basedir}/${warFileName}" webxml="${basedir}/WebRoot/WEB-INF/web.xml">
<!-- 将非jar和非class文件拷贝到war包的对应路径下。 -->
<fileset dir="${basedir}/WebRoot">
<include name="**/**.*" />
<exclude name="**/*.jar"/>
<exclude name="**/*.class"/>
</fileset>
<!-- 将jar和class文件拷贝到war包的对应路径下。 -->
<lib dir="${basedir}/WebRoot/WEB-INF/lib" />
<classes dir="${basedir}/build" />
</war>
</target>
</project>
4.6 jenkins中构建ssh操作配置
填入以下信息,当我们构建成功之后,使用ssh将包发送给远程主机,并且调用远程主机的restart-tomcat.sh脚本来对包进行转移,备份,重启tomcat等操作。
其中Remote directory为我们发送的远程主机路径,和之前我们在系统设置里面配置ssh的remote Directory共同组成路径,该配置为将包发送到远程主机的tmp/fetchweb路径下。
附录:restart-tomcat.sh脚本
#!bin/bash
echo "backup webdemo..."
time=`date +%Y%m%d%H%M`
delete_date=`date +%Y%m%d -d \'-2 day\'`
backDir=/opt/webBack
[ ! -d $backDir ] && mkdir $backDir
find $backDir -name "webapps${delete_date}*.tar.gz" -exec rm -rf {} \\;
cd $backDir
tar -cvzf webapps$time.tar.gz /usr/local/apache-tomcat-8.5.6/webapps/webdemo/
echo "backup complete!"
sleep 2
echo "***************"
echo "begin copy file to webapps..."
cp -r /tmp/fetchweb/Webdemo/build/* /usr/local/apache-tomcat-8.5.6/webapps/webdemo/WEB-INF/classes
cp -r /tmp/fetchweb/Webdemo/WebRoot/*.jsp /usr/local/apache-tomcat-8.5.6/webapps/webdemo/
echo "copy complete!"
echo "***************"
echo "begin restart tomcat..."
sh /usr/local/apache-tomcat-8.5.6/bin/shutdown.sh
sleep 2
sh /usr/local/apache-tomcat-8.5.6/bin/startup.sh
tomcat_port=`netstat -na | grep 8080 | wc -l | awk \'{print $1}\'`
if [ "$tomcat_port" -eq 1 ];then
echo "****************"
echo "tomcat start sucessfully!"
fi
4.7 jenkins中sonar配置
项目设置里面构建增加操作:
JDK选择我们在全局工具中设置的jdk
以下为sonar分析时参数:
#required metadata
#projectKey项目的唯一标识,不能重复
sonar.projectKey=webdemo
sonar.projectName=webdemo
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module
# Java module
java-module.sonar.projectName=test
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=src
java-module.sonar.projectBaseDir=./Webdemo
java-module.sonar.java.binaries=build
五、验证流程
5.1 有一个简单web项目部署在153上面,我们修改一下代码看看效果。
java程序中修改登录密码为111111,然后上传到gitlab中。
5.2 查看gitlab
代码已经上传
5.3 jenkins构建观察
查看构建日志:显示构建成功
浏览器验证项目
使用密码111111可以登录,其余无法登录,说明程序发布成功。
sonarqube查看是否有项目上传分析,发现我们的项目代码已经上传至sonarqube分析
查看一下服务器是否有备份
已经生成了项目备份
至此,说明我们整个持续流程已经跑通。
修改代码----》上传gitlab----》jenkins拉取代码编译----》分发到不同服务器----》备份项目,覆盖升级包到项目目录,重启tomcat---》上传至sonarqube分析
附1:采用webhook实现自动构建:
上述流程是需要手动点击jenkins的立即构建才可以生效,如果要想达到gitlab一有代码就更新,需要做到自动触发jenkins构建,我们要实现一个git钩子功能,就是我们向gitlab等远程仓库push我们的代码时,jenkins能知道我们提交了代码,这是自动构建自动部署的前提。钩子的实现原理是在远端仓库上配置一个Jenkins服务器的接口地址,当本地向远端仓库发起push时,远端仓库会向配置的Jenkins服务器的接口地址发起一个带参数的请求,jenkins收到后开始工作。
要如下配置:
1、jenkins插件安装gitlab插件。
2、配置jenkins
在项目中构建触发器选择如下,选项皆可以默认,点击高级生成token
点击高级后,点击下面Generate,生成token,此token需要在gitlab中配置。生成后,点击保存。
3、gitlab中设置增加web钩子
管理员账号登录gitlab
管理员设置--》设置(settings)--》network--》Outbound requests打开允许钩子和服务访问本地网络,如果不打开这个选项,项目中配置时候会提示网络不通。
项目中设置---》集成(链接和令牌输入jenkins上面刚才生成的链接和令牌),点击增加web钩子即可。
设置完之后点击测试:点击Test--->push events模拟一次push操作,验证钩子是否正常。
提示HTTP200代表配置正常
4、验证一下:
修改一下代码,提交查看结果
修改登录密码为123456,上传到gitlab查看结果
gitlab中已经上传
jenkins查看构建
已经触发了自动构建,是gitlab触发的
sonarqube已经有最新分析结果
查看项目
已经验证成功,使用最新的密码123456可以登录
至此代码上传至gitlab自动触发jenkins构建已经成功。
附2:采用Pipeline+Blueocean实现构建可视化
1、安装支持的插件,安装如下两个插件
2、安装好之后,主界面增加了blue ocean选项
3、点击blue ocean进入。
新界面如下:点击创建流水线
我们的代码仓库是git,就选择git,输入git仓库地址,自动会生成ssh公钥,复制到gitlab中。然后点击创建流水线。
gitlab中添加ssh公钥
4、创建流水线
按照以下步骤创建拉取代码,编译,分发的流水线
点击save run后,查看结果,正常。说明该步骤拉取代码正常,我们接下来增加其他步骤。
增加编译:
增加分发编译后项目并且重启tomcat:
5、验证
点击运行后,查看发现构建成功,也可以直观的看到每个步骤的状态,界面会比较直观好看一些。
切换到jenkins经典模式查看也是显示成功的:和blueocean显示一样
查看应用服务器153的tomcat,也是刚刚启动的
访问正常:
查看gitlab我们创建的blueocean任务会自动生成pipeline上传至gitlab
至此,通过blueocean创建流水线已经验证成功。
附3:使用Jenkins+Docker持续集成
我们改造一下上述持续集成的流程,使用docker来管理项目。这样我们的流程变为:
代码上传至gitlab---》jenkins拉取代码编译---》生成镜像--》push到镜像仓库Harbor--》目标应用服务器pull镜像---》运行容器--》浏览器验证
1、安装镜像仓库Harbor
Harbor离线版安装下载地址
https://github.com/goharbor/harbor/releases
下载离线安装的版本,上传到服务器,解压
在jenkins这台服务器上面安装(192.168.159.149)
验证:使用浏览器访问: http:192.168.159.149,账号为admin,密码为配置文件设置的密码,如本文设置的123456
以下为系统进去界面,表示安装成功
安装命令
tar -zxf harbor-offline-installer-v1.8.0.tgz
mv harbor /usr/local/
配置更改harbor.yml
改主机名
hostname
改密码
harbor_admin_password: 123456
安装Harbor,并验证
./install.sh
docker-compose ps
访问Harbor,默认用户名admin
Harbor的重启
docker-compose down
docker-compose up -d
我们建立一个项目webdemo,一会儿存储我们上传的镜像。
2、创建一个pipeline类型的任务
以下为我们的pipeline脚本:
node {
//拉取代码
stage(\'Checkout code from Gitlab\') {
// Get some code from a GitLub repository
git credentialsId: \'9ff06824-4825-4509-977a-1965a6f5a378\', url: \'git@192.168.159.148:wsxa/myweb.git\'
}
//编译代码
stage(\'Ant invoke\') {
sh \'\'\'
ant -f ./Webdemo/build.xml
\'\'\'
}
//创建镜像
stage(\'Build Image\') {
sh \'\'\'
echo "build new image!"
docker build -t webdemo_tiankai:1.0 ./Webdemo/
echo "build comlete!"
\'\'\'
}
//打标签上传镜像至harbor
stage(\'Push Image to Harbor\') {
sh \'\'\'
echo "push new image to harbor"
docker tag webdemo_tiankai:1.0 192.168.159.149/webdemo/webdemo:1.0
docker login 192.168.159.149 -uadmin -ptiankai@0114
docker push 192.168.159.149/webdemo/webdemo:1.0
echo "push new image to harbor complete! "
\'\'\'
}
//调用目标服务器脚本删除旧的容器和镜像
stage(\'destory old images\') {
sh \'\'\'
ssh root@192.168.159.153 "sh /root/dockershell/check_image.sh"
\'\'\'
}
//调用目标服务器脚本拉取镜像并且运行容器
stage(\'pull images & run\') {
sh \'\'\'
ssh root@192.168.159.153 "sh /root/dockershell/pull_run.sh"
\'\'\'
}
}
其中远程服务器的check_image.sh脚本如下:
#!bin/bash
DOCKER_IMAGE=`docker images | grep "webdemo" | awk \'{print $3}\'`
if [ -n "${DOCKER_IMAGE}" ]; then
# check docker container
for dc in `docker ps -a | grep "webdemo" | awk -F " " \'{print $1}\'`
do
echo "Stop container: ${dc}"
docker stop ${dc}
# delete while docker container was exists
echo "##Delete exists Container_Id: "${dc}
docker rm ${dc}
done
# delete while docker image was exists
echo "##Delete exists Image: webdemo"
docker rmi ${DOCKER_IMAGE}
fi
echo ""
pull_run.sh脚本如下:
#!bin/bash
docker pull 192.168.159.149/webdemo/webdemo:1.0
sleep 10
docker run --name webdemo -d -p 7000:8080 192.168.159.149/webdemo/webdemo:1.0
echo "Container started!"
3、添加运行jenkins的用户jenkins加入到docker组
由于我们tomcat是使用jenkins用户启动的,并非是root用户,要想执行docker等相关命令,需要将jenkins用户加入到docker组,采用如下命令。
sudo gpasswd -a jenkins docker #将当前用户添加至docker用户组
systemctl restart docker #重启docker
如果不执行如上操作,会报以下没有权限的错误:
4、构建任务查看,各个环节均已成功
查看镜像仓库harbor,已经有我们上传的镜像
查看目标服务器镜像与容器,发现已经有镜像和容器了,并且容器是启动状态
浏览器验证应用
服务已经成功
至此jenkins结合docker持续集成流程验证成功。
备注:项目中使用的Dockerfile内容如下:
From centos_tomcat:latest #该镜像为已经创建好的基础镜像,包含了jdk和tomcat
MAINTAINER tiankai@qq.com
COPY ["webdemo.war", "/usr/local/tomcat/webapps/"]
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
注意:1、如果不用开发工具上传代码测试(例如Myelipse等),要想在本机使用git免密上传代码到gitlab,建议也采取本机生成秘钥形式,复制公钥到gitlab的ssh keys里面,就可以达到直接通过ssh方式上传代码,不用每次都要输入账号密码。
2、通过ssh执行远程脚本时候,需要导入环境变量,比如通过blueocean执行远程脚本时候,远程脚本需要导入etc/profile,例如本例中的blueocean.sh
#!bin/bash
source /etc/profile #导入环境变量
cd /tmp/blueocean/Webdemo
cp -r * /usr/local/apache-tomcat-8.5.6/webapps/webdemo/
sh /usr/local/apache-tomcat-8.5.6/bin/shutdown.sh
sleep 2
sh /usr/local/apache-tomcat-8.5.6/bin/startup.sh
3、使用docker升级目标服务器的时候,目标服务器也需要安装docker。
4、本文中创建镜像,运行容器等参数是固定在脚本写定的,实际中应该将该操作的一些过程写成参数,创建或者运行时传递,这样更灵活一些,比如镜像名称,运行容器时候宿主机和容器内部端口等。
以上是关于Jenkins+Ant+Gitlab+Sonarqube+Docker实现持续集成,质量管理的主要内容,如果未能解决你的问题,请参考以下文章