【Jenkins+Ant+Gitlab+Sonarqube+Docker实现持续集成,质量管理】吾生也有涯,而知也无涯。这篇文章主要讲述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,复制该tokenjenkins设置: 添加凭据,添加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="https://www.songbingjia.com/android/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=webdemosonar.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 \'\'\'
sshroot@192.168.159.153 "sh /root/dockershell/check_image.sh"
\'\'\'
}
//调用目标服务器脚本拉取镜像并且运行容器
stage(\'pull images &
run\') {
sh \'\'\'
sshroot@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、本文中创建镜像,运行容器等参数是固定在脚本写定的,实际中应该将该操作的一些过程写成参数,创建或者运行时传递,这样更灵活一些,比如镜像名称,运行容器时候宿主机和容器内部端口等。
推荐阅读
- ansible 文件和目录操作
- Linux 磁盘管理详解--企业实战篇
- KubeVirt with YRCloudFile 擦出创新的火花
- SCCM2013系列,OSD OEM 硬盘格式化操作系统系统分区指定工具参数简介
- Linux Shell 参数传递多种方式
- 新基建+新科技,智慧港口船舶抢抓数字化转型先机
- k8s 部署Nacos集群
- Linux安装kibana
- etcd集群常见问题