judasn/spring-boot-ci-demo
Trên GitHub, judasn/spring-boot-ci-demo đã đạt 5 sao, ngôn ngữ Java. 持续构建ci全流程(jenkins+git+maven+docker+sonar+gatling)
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
Snapshot
Cộng tác viên hàng đầu
Xem cộng tác viên hàng đầu
项目介绍
- ci(持续构建测试项目),数据源使用h2
概述
- 以测试项目为例:https://github.com/14251104246/spring-boot-ci-demo
-
第一个红框里是加特林(gatling)脚本的存放目录位置与结构
-
第二个红框的Dockerfile也是必须的
-
项目必须为maven项目
-
前提用
docker-compose构建服务器,步骤如下-
创建宿主机挂载目录:
mkdir -p /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql /data/docker/ci/gatling/results -
赋权(避免挂载的时候,一些程序需要容器中的用户的特定权限使用):
chmod -R 777 /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql /data/docker/ci/gatling/results -
使用
docker-compose执行如下脚本
version: '3' networks: prodnetwork: driver: bridge services: sonardb: image: postgres:9.6.6 restart: always ports: - "5433:5432" networks: - prodnetwork volumes: - /data/docker/ci/postgresql:/var/lib/postgresql environment: - POSTGRES_USER=sonar - POSTGRES_PASSWORD=sonar sonar: image: sonarqube:6.7.1 restart: always ports: - "19000:9000" - "19092:9092" networks: - prodnetwork depends_on: - sonardb volumes: - /data/docker/ci/sonarqube/conf:/opt/sonarqube/conf - /data/docker/ci/sonarqube/data:/opt/sonarqube/data - /data/docker/ci/sonarqube/extension:/opt/sonarqube/extensions - /data/docker/ci/sonarqube/bundled-plugins:/opt/sonarqube/lib/bundled-plugins environment: #- SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5433/sonar - SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5432/sonar - SONARQUBE_JDBC_USERNAME=sonar - SONARQUBE_JDBC_PASSWORD=sonar nexus: image: sonatype/nexus3 restart: always ports: - "18081:8081" networks: - prodnetwork volumes: - /data/docker/ci/nexus:/nexus-data jenkins: image: wine6823/jenkins:1.1 restart: always ports: - "18080:8080" networks: - prodnetwork volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro - $HOME/.ssh:/root/.ssh - /data/docker/ci/jenkins/lib:/var/lib/jenkins/ - /usr/bin/docker:/usr/bin/docker - /data/docker/ci/jenkins/home:/var/jenkins_home depends_on: - nexus - sonar environment: - NEXUS_PORT=8081 - SONAR_PORT=9000 - SONAR_DB_PORT=5432 -
-
最后用dockers启动一个nginx服务器,命令如下
docker run --name some-nginx -v /data/docker/ci/gatling/results:/usr/share/nginx/html:ro -p 8080:80 -d nginx
步骤一(jenkins)
- 创建jenkins流水线(打开jenkins服务器首页,点击新建任务)
- 配置流水线脚本(配置地址)
Jenkinsfiles脚本代码如下
node {
/*****************************git代码块***********************************/
// ! git 仓库路径
gitUrl = 'https://github.com/14251104246/spring-boot-ci-demo.git'
// ! git 分支
gitBranch = 'master'
// ! git 使用的jenkins证书id
gitCredential = '5b3912a8-0074-4955-b48f-c0af217785ac'
stage ('git') {
git branch: gitBranch,
credentialsId: gitCredential,
url: gitUrl
}
/*****************************预处理代码块***********************************/
// ! maven最终构建项目ArtifactId(项目目录请和ArtifactId一致)(可改)
mavenArtifactId = 'yisike-parent'
// 文件夹分隔
DELIMITER = '/'
// jenkins挂载在宿主机的所有项目地址
volumeRoot = '/data/docker/ci/jenkins/home';
// jenkins在容器中的所有项目地址
jenkinsRoot = '/var/jenkins_home'
// 具体项目工作区
projectWorkspace = 'workspace'
// jenkins挂载在宿主机的项目地址
volumeDeployRootPath = volumeRoot + DELIMITER + projectWorkspace + DELIMITER + env.JOB_NAME
// jenkins在容器中的项目路径
jenkinsDeployRootPath = env.WORKSPACE
// jenkins挂载在宿主机的构建地址
volumeDeployPath = ''
// jenkins在容器中的构建路径
jenkinsDeployPath = ''
//是否只有一个项目
mavenSingleModule = true
String relativePath = ''
stage ('pre') {
echo '路径预处理'
volumeDeployPath = volumeDeployRootPath
jenkinsDeployPath = jenkinsDeployRootPath
println 'jenkins挂载在宿主机的项目地址:' + volumeDeployRootPath
println 'jenkins在容器中的项目路径:' + jenkinsDeployRootPath
println 'jenkins挂载在宿主机的构建地址:' + volumeDeployPath
println 'jenkins在容器中的构建路径:' + jenkinsDeployPath
}
/*******************************maven代码块*********************************/
// maven地址
MVN_HOME = 'docker run -t --rm --name my-maven-project -v '+volumeDeployPath+':/usr/src/mymaven -v $HOME/.m2:/root/.m2 -w /usr/src/mymaven maven:3.3-jdk-8 '
stage ('mvn') {
echo 'start mvn'
//暂时使用sh,后边替换为 ArtifactoryMavenBuild
stage ('mvn-clean') {
sh """
${MVN_HOME} mvn clean
"""
}
stage ('mvn-package') {
thisPath = jenkinsDeployRootPath + DELIMITER + (relativePath == null || relativePath.size() == 0 ? relativePath : relativePath + DELIMITER)+ DELIMITER
sh """
${MVN_HOME} mvn package -DskipTests
"""
}
echo 'stop mvn'
}
/**********************************docker代码块************************************************************/
/**********************************docker代码块************************************************************/
//服务名称(子模块目录名称)
def srvName = 'demo'
//仓库地址
def registryUrl = 'hboverseas.banggood.cn'
//远程服务器地址(用于部署)
def devHost = '122.152.225.111'
def devDockerDaemon = "tcp://${devHost}:2376"
//项目名称
def project = 'ad'
//远程docker容器启动参数
def dockerParam = "--name ${srvName} -v /etc/hosts:/etc/hosts -v /data/docker/logs/yisike/yisike-registry:/data/docker/logs --restart=always -p 8090:8090"
stage ('docker') {
echo 'start docker'
stage ('构建镜像')
{
sh """
cd ${jenkinsDeployPath}/
docker build -t $registryUrl/$project/$srvName:$BUILD_NUMBER ./
"""
}
//stage ('推送镜像')
//{
// sh """
// docker push $registryUrl/$project/$srvName:$BUILD_NUMBER
// docker rmi $registryUrl/$project/$srvName:$BUILD_NUMBER
// """
//}
//stage ('部署生产环境')
//{
// sh """
// docker -H ${devDockerDaemon} pull $registryUrl/$project/$srvName:$BUILD_NUMBER
// docker -H ${devDockerDaemon} rm -f ${srvName} | true
// docker -H ${devDockerDaemon} run -d ${dockerParam} $registryUrl/$project/$srvName:$BUILD_NUMBER
// """
//}
stage ('部署生产环境')
{
sh """
docker rm -f ${srvName} | true
docker run -d ${dockerParam} $registryUrl/$project/$srvName:$BUILD_NUMBER
"""
}
echo 'complete docker'
}
}
- 点击保存后进入
ci-demo流水线,点击立即构建(图中2是构建结果)
步骤二(集成sonar)
- 进入sonarQube服务器创建一个新的需要分析的项目(打开官方引导教程)
- 复制生成的mvn命令
- 配置流水线脚本(配置地址)
- 把mvn命令加入到
Jenkinsfiles脚本,如下
node {
/*****************************git代码块***********************************/
// ! git 仓库路径
gitUrl = 'https://github.com/14251104246/spring-boot-ci-demo.git'
// ! git 分支
gitBranch = 'master'
// ! git 使用的jenkins证书id
gitCredential = '5b3912a8-0074-4955-b48f-c0af217785ac'
stage ('git') {
git branch: gitBranch,
credentialsId: gitCredential,
url: gitUrl
}
/*****************************预处理代码块***********************************/
// ! maven最终构建项目ArtifactId(项目目录请和ArtifactId一致)(可改)
mavenArtifactId = 'yisike-parent'
// 文件夹分隔
DELIMITER = '/'
// jenkins挂载在宿主机的所有项目地址
volumeRoot = '/data/docker/ci/jenkins/home';
// jenkins在容器中的所有项目地址
jenkinsRoot = '/var/jenkins_home'
// 具体项目工作区
projectWorkspace = 'workspace'
// jenkins挂载在宿主机的项目地址
volumeDeployRootPath = volumeRoot + DELIMITER + projectWorkspace + DELIMITER + env.JOB_NAME
// jenkins在容器中的项目路径
jenkinsDeployRootPath = env.WORKSPACE
// jenkins挂载在宿主机的构建地址
volumeDeployPath = ''
// jenkins在容器中的构建路径
jenkinsDeployPath = ''
//是否只有一个项目
mavenSingleModule = true
String relativePath = ''
stage ('pre') {
echo '路径预处理'
volumeDeployPath = volumeDeployRootPath
jenkinsDeployPath = jenkinsDeployRootPath
println 'jenkins挂载在宿主机的项目地址:' + volumeDeployRootPath
println 'jenkins在容器中的项目路径:' + jenkinsDeployRootPath
println 'jenkins挂载在宿主机的构建地址:' + volumeDeployPath
println 'jenkins在容器中的构建路径:' + jenkinsDeployPath
}
/*******************************maven代码块*********************************/
// maven地址
MVN_HOME = 'docker run -t --rm --name my-maven-project -v '+volumeDeployPath+':/usr/src/mymaven -v $HOME/.m2:/root/.m2 -w /usr/src/mymaven maven:3.3-jdk-8 '
stage ('mvn') {
echo 'start mvn'
//暂时使用sh,后边替换为 ArtifactoryMavenBuild
stage ('mvn-clean') {
sh """
${MVN_HOME} mvn clean
"""
}
stage ('mvn-package') {
thisPath = jenkinsDeployRootPath + DELIMITER + (relativePath == null || relativePath.size() == 0 ? relativePath : relativePath + DELIMITER)+ DELIMITER
sh """
${MVN_HOME} mvn package -DskipTests
"""
}
stage ('mvn-代码质量') {
sh """
${MVN_HOME} mvn sonar:sonar \
-Dsonar.host.url=http://172.17.0.1:19000 \
-Dsonar.login=40aee4cc56ecf6d6742af9cb36fd0f00f896e306
"""
}
echo 'stop mvn'
}
/**********************************docker代码块************************************************************/
/**********************************docker代码块************************************************************/
//服务名称(子模块目录名称)
def srvName = 'demo'
//仓库地址
def registryUrl = 'hboverseas.banggood.cn'
//远程服务器地址(用于部署)
def devHost = '122.152.225.111'
def devDockerDaemon = "tcp://${devHost}:2376"
//项目名称
def project = 'ad'
//远程docker容器启动参数
def dockerParam = "--name ${srvName} -v /etc/hosts:/etc/hosts -v /data/docker/logs/yisike/yisike-registry:/data/docker/logs --restart=always -p 8090:8090"
stage ('docker') {
echo 'start docker'
stage ('构建镜像')
{
sh """
cd ${jenkinsDeployPath}/
docker build -t $registryUrl/$project/$srvName:$BUILD_NUMBER ./
"""
}
//stage ('推送镜像')
//{
// sh """
// docker push $registryUrl/$project/$srvName:$BUILD_NUMBER
// docker rmi $registryUrl/$project/$srvName:$BUILD_NUMBER
// """
//}
//stage ('部署生产环境')
//{
// sh """
// docker -H ${devDockerDaemon} pull $registryUrl/$project/$srvName:$BUILD_NUMBER
// docker -H ${devDockerDaemon} rm -f ${srvName} | true
// docker -H ${devDockerDaemon} run -d ${dockerParam} $registryUrl/$project/$srvName:$BUILD_NUMBER
// """
//}
stage ('部署生产环境')
{
sh """
docker rm -f ${srvName} | true
docker run -d ${dockerParam} $registryUrl/$project/$srvName:$BUILD_NUMBER
"""
}
echo 'complete docker'
}
}
- 点击保存后进入
ci-demo流水线,点击立即构建
步骤三(集成gatling)
-
打开jenkins服务器首页,创建gatling的测试
-
Jenkinsfile脚本如下
node {
/*****************************git代码块***********************************/
// ! git 仓库路径
gitUrl = 'https://github.com/14251104246/spring-boot-ci-demo.git'
// ! git 分支
gitBranch = 'master'
// ! git 使用的jenkins证书id
gitCredential = '5b3912a8-0074-4955-b48f-c0af217785ac'
stage ('git') {
git branch: gitBranch,
credentialsId: gitCredential,
url: gitUrl
}
/*****************************预处理代码块***********************************/
// ! maven最终构建项目ArtifactId(项目目录请和ArtifactId一致)(可改)
mavenArtifactId = 'yisike-parent'
// 文件夹分隔
DELIMITER = '/'
// jenkins挂载在宿主机的所有项目地址
volumeRoot = '/data/docker/ci/jenkins/home';
// jenkins在容器中的所有项目地址
jenkinsRoot = '/var/jenkins_home'
// 具体项目工作区
projectWorkspace = 'workspace'
// jenkins挂载在宿主机的项目地址
volumeDeployRootPath = volumeRoot + DELIMITER + projectWorkspace + DELIMITER + env.JOB_NAME
// jenkins在容器中的项目路径
jenkinsDeployRootPath = env.WORKSPACE
// jenkins挂载在宿主机的构建地址
volumeDeployPath = ''
// jenkins在容器中的构建路径
jenkinsDeployPath = ''
//是否只有一个项目
mavenSingleModule = true
String relativePath = ''
stage ('pre') {
echo '路径预处理'
volumeDeployPath = volumeDeployRootPath
jenkinsDeployPath = jenkinsDeployRootPath
println 'jenkins挂载在宿主机的构建地址:' + volumeDeployPath
println 'jenkins在容器中的构建路径:' + jenkinsDeployPath
}
/*******************************gatling代码块*********************************/
scalaScriptDir = volumeDeployPath + '/src/test/gatling/user-files'
resultDir = '/data/docker/ci/gatling/results'
// 加特林命令行
COM_DOCKER = 'docker run -t --rm -v '+ scalaScriptDir +':/opt/gatling/user-files -v '+ resultDir +':/opt/gatling/results denvazh/gatling --mute'
stage ('gatling') {
echo 'start gatling'
//暂时使用sh,后边替换为 ArtifactoryMavenBuild
stage ('gatling') {
sh """
rm -f out.txt | true
${COM_DOCKER} 1>>out.txt
cat out.txt
echo http://localhost:8080\$(cat out.txt | grep 'Please open the following file' | cut -b 53- )
"""
}
echo 'stop gatling'
}
}
- 创建完成后,点击构建,等待构建完成后查看输出
- 点击上图中2指向的蓝点,查看最底下的输出
- 点击链接,查看gatling的测试结果
Repo liên quan
Master programming by recreating your favorite technologies from scratch.
A curated meta-list of curated lists organized by technology domain. The repository acts as a directory pointing to hundreds of specialized awesome lists covering programming languages, platforms, frameworks, and tooling. All content is community-contributed under the CC0 public domain dedication.
Public APIs is a community-curated GitHub repository listing free, publicly accessible APIs across a wide range of categories, with auth type, HTTPS, and CORS noted for each entry. It's a browsable reference, not a library to install.
freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.
Trả lời nhanh
Đọc thêm về judasn/spring-boot-ci-demo ở đâu?
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/judasn/spring-boot-ci-demo là nguồn chính thức.
judasn/spring-boot-ci-demo có bao nhiêu sao?
judasn/spring-boot-ci-demo có 5 sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/judasn/spring-boot-ci-demo. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
judasn/spring-boot-ci-demo có phải mã nguồn mở không?
TopGit chưa ghi nhận license cho judasn/spring-boot-ci-demo. Phần lớn repo public trên GitHub là mã nguồn mở, nhưng điều khoản khác nhau từng repo — mở file LICENSE để xác nhận.
judasn/spring-boot-ci-demo có tag gì không?
Bản đồng bộ chưa ghi nhận topic GitHub nào cho judasn/spring-boot-ci-demo. GitHub topics hiển thị ở thanh bên phải trang repo — đó là nơi đáng kiểm tra nhất.
judasn/spring-boot-ci-demo có website riêng không?
TopGit chưa ghi nhận URL trang chủ cho judasn/spring-boot-ci-demo. Phần README ở tab phía trên thường có link demo, hoặc xem mô tả GitHub của repo.
judasn/spring-boot-ci-demo còn đang phát triển không?
Commit gần nhất trên judasn/spring-boot-ci-demo là 8.2 năm trước (theo timestamp GitHub). Repo có 2 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
Đọc đầy đủ README ở tab phía trên.








