目录
(1)将jdk和maven复制到docker的data目录下
一、容器化持续集成的基础概念
1.敏捷开发,持续集成,持续交付,DevOps区别
敏捷开发:计划+代码+构建
持续集成:敏捷开发+测试
持续交付:持续集成+发布
DevOps:持续交付+部署+运维
2.为什么需要持续集成
统一的git:集成代码
持续构建:功能集成在一起,保证不出错
自动化测试:一个模块的功能能够正常工作
联调测试环境:不同模块能够正常工作
3.如何设计持续集成流水线
4.什么是持续部署
(1)概念
自动化的将一个或多个软件又快又稳定的、可重复的联合部署到目标机器,以便功能正常运行。
(2)要素
- 自动化部署:ansible
- 应用与配置分离,一次构建,多处运行:spring cloud config
- 提供应用健康监测的接口:spring cloud actuator
(3)常见自动化部署方法
CI:持续集成,将代码通过jenkins将包导出到制品库
CD:持续交付,jenkins构建工作流,运用ansible将其推送到不同的环境,加密数据通过vault保证安全
(4)如何测试部署的效果
*1)蓝绿发布
将代码发布后,大部分用户还是继续使用老版本,少部分用户用新版本,发现使用没问题,再慢慢都切到新版本来
*2)金丝雀发布
蓝绿发布是两个完全不同的版本,金丝雀发布是在一套环境中,只是一部分机器变成新部署的情况,然后发现没问题再慢慢替代
*3)功能开关
开发人员提供一个远程的终止开关,可以再部署到正式环境后发现问题随时关闭或者打开该功能
5.项目进度把控
(1)什么是Jira
我们使用Jira来进行项目进度把控,Jira有点类似于禅道。
Jira从上到下分级:
- 版本
- 该版本下得功能模块
- 每个模块的开发任务类型:工作量,复杂度,风险性
- 具体的开发任务:开发进度,开发的bug
(2)idea中集成Jira
*1)先下载
*2)设置jira的配置
*3)可视化的jira
6.Gitflow和Trunk Base两种分支模型
(1)Gitflow
Gitflow = Master + develop + feature + release + hot fix
- master:始终保持生产部署状态
- develop:最新的,可发布的变更,也叫集成分支
- release:发布分支,但是功能少于master,分支命名:release-*
- feature:功能分支,每一个具体开发在此,但是最终结果要合并到develop
- hot fix:补丁分支,用于修复一些问题,最后要合并到develop或者master
Gitflow适用于对稳定性要求高的场景,开源项目,少量资深研发多数普通开发的情况
(2)Trunk Base:主干开发分支模型
所有人共享一个Repository,修改好之后就直接给到Release版本,然后发布。
可以通过开关的方式决定是否开放某些功能。
适用于互联网,软件本身迭代非常快,团队资深研发比较多
二、gitlab配置
注:我们gitlab所在的虚拟机为:192.168.200.160
1.虚拟机中安装docker和docker compose
这里提供两种方式安装docker
方法一:
#卸载旧的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装需要的安装包
yum install -y yum-utils
#设置镜像的仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新软件包索引
yum makecache fast
#安装docker相关的
yum install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
# 设置开机自动启动
systemctl enable docker
docker version
#安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#设置权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose version
方法二:
##docker
#1.下载Docker依赖组件
yum -y install yum-utils device-mapper-persistent-data lvm2
#2.设置下载Docker的镜像源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.安装Docker服务
yum -y install docker-ce
#4.安装成功后,启动Docker并设置开机自启
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
#5.查看版本
docker version
##docker-compose
#1.下载Docker/Compose:https://github.com/docker/compose
#2.将下载好的[docker-compose-Linux-x86_64]()文件移动到Linux操作系统
#3.设置文件权限
chmod a+x docker-compose-Linux-x86_64
# 移动到/usr/bin目录下,并重命名为docker-compose
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
#查看
echo $PATH
#测试安装成功
docker-compose version
2.关闭防火墙
systemctl stop firewalld
3.拉取gitlab镜像
#创建目录
cd /usr/local/
mkdir docker
cd docker/
mkdir gitlab_docker
cd gitlab_docker/
#创建一个空文件
vi docker-compose.yml
#查看gitlab的版本
docker search gitlab
#拉取版本
docker pull gitlab/gitlab-ce:latest
#编写docker-compose.yml文件
vim docker-compose.yml
###################################################
version: '3.1'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.200.160:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:2224'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
###################################################
#运行docker-compose
docker-compose up -d
#查看启动日志
docker-compose logs -f
4.登录gitlab,并设置密码
查看一下页面:
注:如果你打开页面显示错误,可能是还没启动好,这个启动时间比较长
#查看gitlab的账户密码
docker exec -it gitlab bash
cat /etc/gitlab/initial_root_password
账户名:root
密码:复制上面查找到的内容
登录进去之后修改密码:
三、安装maven和jdk
注:我们此处的虚拟机为192.168.200.161
1.安装jdk11,别用jdk8,后面会有很多坑
#下载jdk11
curl -O https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
#jdk1.8下载
#yum install java-1.8.0-openjdk* -y
#解压jdk
tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
mv jdk-11.0.1 /usr/local/
cd /usr/local/
mv jdk-11.0.1/ jdk/
vi /etc/profile.d/jdk11.sh
##############################################
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
##############################################
source /etc/profile.d/jdk11.sh
java -version
2.上传maven的jar包,并做解压
cd /usr/local/
#安装
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
#修改一下名字
mv apache-maven-3.6.3/ maven/
#设置maven的配置文件
cd maven/conf/
vim settings.xml
#注意,如果是jdk1.8的话,<profile>和<activeProfile>需要变更一下
<profile>
<id>jdk8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
###############################################################################
#配置maven的阿里云仓库地址,大概是在159行的位置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
#配置maven的jdk11编译插件配置setting.xml,大概是在253行
<profile>
<id>jdk11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
#配置activeProfile,大概在275行
<activeProfiles>
<activeProfile>jdk11</activeProfile>
</activeProfiles>
###############################################################################
vi /etc/profile
#######################################################
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
#######################################################
source /etc/profile
mvn -version
四、Jenkins
官网:Jenkins
1.下载jenkins,并配置基础插件
#拉取镜像
docker pull jenkins/jenkins:2.346.3-2-lts
#设置docker-compose配置文件
cd /usr/local/
mkdir docker
cd docker/
mkdir jenkins_docker
cd jenkins_docker/
vim docker-compose.yml
########################################################
version: "3.1"
services:
jenkins:
image: jenkins/jenkins:2.346.3-2-lts
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/
########################################################
#运行docker-compose
docker-compose up -d
#重启
docker-compose restart
#查看运行日志
docker logs -f jenkins
#第一次启动失败,因为没有设置权限,给data目录设置权限
chmod -R a+w data/
#因为官方数据源下载很慢,我们替换数据源
cd data/
vim hudson.model.UpdateCenter.xml
#########################################################################
#我们这里提供2个数据源,随便选一个就行
http://mirror.esuni.jp/jenkins/updates/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#########################################################################
在我们查看日志的时候,会有一个密码,记一下,登录的时候用。
查看页面:http://192.168.200.161:8080/
进来之后输入密码,选择插件安装,然后点击安装,按照顺序往下走。
需要下载3个软件,然后重启一下
2.在jenkins中配置jdk和maven
(1)将jdk和maven复制到docker的data目录下
#将jdk和maven的包复制到data目录下
cd /usr/local/docker/jenkins_docker/data/
mv /usr/local/jdk/ ./
mv /usr/local/maven/ ./
#因为我们在docker-compose中设置了数据卷,所以我们去到docker内部查看一下
#也是可以看到复制的jdk和maven目录的
docker exec -it jenkins bash
cd /var/jenkins_home/
ls
(2)在页面上配置jdk
#jdk11
/var/jenkins_home/jdk
#maven
/var/jenkins_home/maven
(3)配置ssh server
该步骤用于配置目标服务器,该目标服务器中需要有docker,我们默认使用当前161的虚拟机
cd /usr/local/
mkdir test
五、jenkins实现基础的CI/CD
1.编写一个项目
(1)创建项目
进去之后配置一下maven
(2)写好对应的类,并测试一下
TestController:
package com.xupeng.mytest.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "hello";
}
}
启动后进入:localhost:8080/test,测试通过
2.配置gitlab,并提交代码
先启动192.168.200.160虚拟机
(1)启动gitlab
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
cd /usr/local/docker/gitlab_docker/
#运行docker-compose
docker-compose up -d
#查看启动日志
docker-compose logs -f
启动后登录页面:http://192.168.200.160:8929/
(2) 新建一个项目,并将代码提交
*1)建好项目
*2)在idea中将代码提交
选择mytest这个文件夹:
3.jenkins拉取gitlab中的代码
验证代码是否成功拉取:
来到161的虚拟机,我们发现是可以看到对应的代码的:
docker exec -it jenkins bash
cd ~
cd workspace/mytest
ls
4.在jenkins处进行maven构建项目
clean install package -DskipTests
保存后再次点击构建:
再次验证代码是否构建成功,我们会发现多了一个target文件夹:
docker exec -it jenkins bash
cd ~
cd workspace/mytest
ls
5.将构建好的jar包发送到目标服务器
target/*.jar
6.将目标服务器上的jar包以docker的形式运行
(1)修改原来的项目
pom.xml:
构建的时候设置一个finalName
<build>
<finalName>mytest</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Dockerfile:
注意:如果FROM里面的镜像拉取不下来,可以换一个:
adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
FROM openjdk:11-jre
COPY mytest.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar mytest.jar
docker-compose.yml:
version: '3.1'
services:
mytest:
build:
context: ./
dockerfile: Dockerfile
image: mytest:v1.0.0
container_name: mytest
ports:
- 8081:8080
(2)来到jenkins重新构建一下
(3)查看是否构建成功
161虚拟机:
docker exec -it jenkins bash
cd ~
cd workspace/mytest/
ls
(4)修改jenkins的configure
sorce file里面加了:docker/*
target/*.jar docker/*
cd /usr/local/test/docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build
docker image prune -f
我们再build一下,然后http://192.168.200.162:8081/test
然后我们变更test方法里面的返回数据,在重新build一下,就可以刷新了
7.基于参数构建,设置不同的版本
(1)设置git parameter
git checkout $tag
配置好之后gitlab设置tag:
我们设置2个版本,分别是v1.0.0和v2.0.0:
修改代码:改一下版本号
我们发布的时候如果选择v1.0.0就是之前的,如果选择v2.0.0就是修改之后的
六、SonarQube代码质量检测
跑完第五步,我们已经能正常的上传代码,通过jenkins去拉取代码并编译,然后将编译后的代码提交到目标服务器,并直接启动了。
我们还需要增加代码质量检测。
1.SonarQube的下载和安装
先去官网看最新的稳定版本,我们就下载该版本。
现在SonarQube已经不支持mysql了,需要一个postgres数据库,
#拉取postgres数据库镜像
docker pull postgres
#拉取sonarqube镜像
docker pull sonarqube:8.9.9-community
#设置sonarqube
cd /usr/local/docker/
mkdir sonarqube_docker
cd sonarqube_docker/
vim docker-compose.yml
###################################################
version: "3.1"
services:
db:
image: postgres
container_name: db
ports:
- 5432:5432
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.9-community
container_name: sonarqube
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
###################################################
#启动
docker-compose up -d
#查看日志,会发现有报错
# max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
docker logs -f sonarqube
#配置虚拟机大小
vi /etc/sysctl.conf
########################
vm.max_map_count=262144
########################
#刷新一下配置
sysctl -p
#重新启动
docker-compose up -d
登录sonarqube:http://192.168.200.161:9000/
账户和密码都是admin 。登录后重置一下密码
2.下载一个中文插件
下载好之后有一个弹窗,重启即可。
3.通过maven的方式实现代码质量检测(不推荐)
(1)来到maven的config.setting配置文件,添加如下配置
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123456789</sonar.password>
<sonar.host.url>http://192.168.200.161:9000</sonar.host.url>
</properties>
</profile>
(2)idea中的terminal中输入
#对代码进行质量检测
cls
mvn -v
mvn sonar:sonar
(3)查看质量检测结果
刷新一下sonarqube首页,就会多了一个代码检测报告
4.通过sonar-scanner进行代码质量检测(推荐)
*1)下载安装,并设置配置文件
#因为下载下来是zip,我们先下载一下解压缩的支持
cd /
yum -y install unzip
#上传好压缩包之后解压
unzip sonar-scanner-cli-4.6.1.2450-linux.zip
#改个名
mv sonar-scanner-4.6.1.2450-linux/ sonar-scanner
#移动到jenkins的data目录下
cd /usr/local/docker/jenkins_docker/data
mv /sonar-scanner ./
#设置一下配置文件
cd /usr/local/docker/jenkins_docker/data/sonar-scanner/conf
vim sonar-scanner.properties
################################################
sonar.host.url=http://192.168.200.161:9000
sonar.sourceEncoding=UTF-8
################################################
#启动
cd /usr/local/docker/sonarqube_docker/
docker-compose up -d
*2)给用户设置一个token,用来唯一标识用户
*3)执行代码检测
#进入代码目录
cd /usr/local/docker/jenkins_docker/data/workspace/mytest/
#启动sonar-scanner
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=mytest-linux -Dsonar.login=6b35ae055567be4a0179b5204a968653d7d8feac -Dsonar.projectKey=mytest-linux -Dsonar.java.binaries=./target/
5.jenkins中整合sonarqube
(1)jenkins下载sonarqube
假设你的网络不好下载不下来,也可以通过上传的方式完成:
(2)配置sonarqude
如果点击add的时候没效果,就先保存,然后重新进来看:
(3)将sonarqube配置进jenkins
找到任务下面的配置:
在build下面maven的后面追加sonar:
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=./target/
然后重新编译,这个时候会报错:
(4)解决遇到的bug问题
我们会看到之前测试sonar的时候生成了一个隐藏文件夹:.scannerwork
将他删除掉即可
cd /usr/local/docker/jenkins_docker/data/workspace/mytest/
ls -a
rm -rf .scannerwork/
jenkins重新构建即可。
七、Harbor镜像仓库
我们之前是jenkins把war包发送给目标服务器,然后目标服务器通过docker-compose构建docker。
当目标服务器有多个的时候,每个都会构建一次,不好。
我们希望在jenkins的harbor里面构建好,给一个通知给到目标服务器,然后目标服务器自己去harbor里面去拉取
1.harbor的安装和配置
#解压
tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/
#复制配置文件
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
#编辑配置文件
#####################################
#修改hostname
hostname: 192.168.200.161
#修改http下得port
port: 80
#将https下面的所有的都注释掉,包括https本身
#记录一下harbor_admin_password的密码
#####################################
#运行harbor
./install.sh
查看页面:http://192.168.200.161:80/
用户名:admin
密码:Harbor12345
2.harbor的基本操作
(1)新建一个项目
(2)配置一下私有库
vi /etc/docker/daemon.json
############################################################
{
"insecure-registries":["192.168.200.161:80"]
}
############################################################
(3)先在jenkins虚拟机中随便起一个tomcat服务
#下载镜像
docker pull tomcat
docker images
#启动
#-d:以后台运行 -p:暴露端口 外网端口:tomcat内部端口 --name:命名
docker run -d -p 3355:8080 --name tomcat01 tomcat
#此时你运行一下是会报错的
#需要拷贝一下
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps
(4)将tomcat推送到harbor仓库中
#找到tomcat的imageId
docker images
#tomcat的imageId:6ce88d2075b4
#harbor的ip:端口/仓库名称/image的名称:版本号
docker tag 6ce88d2075b4 192.168.200.161:80/repo/mytomcat:v1.0.0
docker images
#重启docker
systemctl restart docker
#登录harbor
#如果登录不上去,可以重启一下harbor
docker login -u admin -p Harbor12345 192.168.200.161:80
#将tomcat推送到harbor仓库中
docker push 192.168.200.161:80/repo/mytomcat:v1.0.0
(5)目标服务拉取镜像
来到目标服务器192.168.200.162
*1)配置daemon.json,并拉取
vi /etc/docker/daemon.json
############################################################
{
"insecure-registries":["192.168.200.161:80"]
}
############################################################
#重启一下docker
systemctl restart docker.service
#拉取镜像
docker pull 192.168.200.161:80/repo/mytomcat:v1.0.0
3.jenkins容器内部使用docker
我们重新操作jenkins服务器:192.168.200.161
要想jenkins内部使用docker,推荐将docker.sock文件变成root:root,且所有人都能操作,这样,jenkins就可以直接操作docker了。确保让jenkins使用虚拟机里面的docker,而不是自己下载一个docker
#将docker.sock变成root组下得root用户文件
cd /var/run/
chown root:root docker.sock
#其他用户也有读写权限
chmod o+rw docker.sock
#修改docker-compose配置文件
cd /usr/local/docker/jenkins_docker/
vim docker-compose.yml
#############################################################
version: "3.1"
services:
jenkins:
image: jenkins/jenkins:2.346.3-2-lts
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /etc/docker/daemon.json:/etc/docker/daemon.json
#############################################################
#重启jenkins
docker-compose up -d
#看看jenkins里面好不好用docker
docker exec -it jenkins bash
docker version
exit
4.jenkins实现制作自定义镜像并推送harbor
(1)删除原本推送到目标服务器并在目标服务器构建的步骤
在build阶段的sonar后面追加一个execute shell
(2)修改代码,并追加版本
gitlab中增加v3.0.0
将文字显示为v3.0 .0
(3)将docker镜像在jenkins生成
mv target/*.jar docker/
docker build -t mytest3:$tag docker/
docker login -u admin -p Harbor12345 192.168.200.161:80
docker tag mytest3:$tag 192.168.200.161:80/repo/mytest3:$tag
docker push192.168.200.161:80/repo/mytest3:$tag
5.目标服务器拉取harbor镜像
(1)目标服务器拉取镜像的校验逻辑
- 告知目标服务器拉取哪个镜像
- 判断目标服务器是否正在运行容器,如果是,则把正在运行的容器删除
- 如果目标服务器已经存在当前镜像,如果是,则删除
- 目标服务器拉取harbor上的镜像
- 将拉取下来的镜像运行成容器
其次,目标服务器还需要知道的信息有:
- harbor地址/harbor仓库/镜像名:镜像版本
- 端口号
(2)目标服务器脚本
我们来到192.168.200.162服务器:
vim deploy.sh
############################################################
#harbor的地址
harbor_url=$1
#harbor仓库名
harbor_project_name=$2
#镜像名称
project_name=$3
#版本号
tag=$4
#暴露端口
port=$5
imageName=$harbor_url/$harbor_project_name/$project_name:$tag
#根据名称过滤查找出一行容器数据,然后再获取第一列的数据,即对应的标识
containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
#如果当前容器已经存在,先停掉当前容器,再删除
if [ "$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
echo "Delete Container Success"
fi
#根据名称过来找出镜像,并打印出第三列
imageId=`docker images | grep ${project_name} | awk '{print $3}'`
#如果当前镜像存在,删除
if [ "$imageId" != "" ] ; then
docker rmi -f $imageId
echo "Delete Image Success"
fi
#登录harbor
docker login -u admin -p Harbor12345 $harbor_url
#拉取
docker pull $imageName
#运行
docker run -d -p $port:$port --name $project_name $imageName
echo "Start Container Success"
echo $project_name
############################################################
#配置权限
chmod a+x deploy.sh
#将该文件放到PATH下,这样任何位置都能运行
echo $PATH
mv deploy.sh /usr/bin/
(3)jenkins中配置目标服务器相关信息
*1)先配置一个字符串参数
*2)设置一个post-build actions
deploy.sh 192.168.200.161:80 repo mytest3 $tag $port
#
#deploy.sh 192.168.200.161:80 repo mytest3 $tag 8082
*3)对于实际端口和暴露端口不一样的情况
修改目标脚本服务器,新增一个参数,比如叫hostport=8081。然后入参那个地方,port变化一下,一个containport=8080,一个hostport=8081
docker run -d -p $containport:$hostport --name $project_name $imageName
然后再jenkins的配置里面的general里再新增一个hostport入参
然后Post-build Actions,新增一个入参