制品库平台实践-nexus
制品库平台实践-nexus
目录
[TOC]
本节实践
实战名称 |
---|
💘 实践:配置Maven代理仓库(测试成功)-2022.6.7 |
💘 实践:创建Maven本地仓库(依赖)-2022.6.10(测试成功) |
💘 实践:创建Raw本地仓库(制品)(测试成功)-2022.6.10 |
💘 实践:使用管理页面上传制品(测试成功)-2023.6.27 |
💘 实践:使用mvn命令上传制品(自定义pom信息(灵活))-2022.6.11 |
💘 实践:直接读取pom文件(扩展)-2022.6.11(测试成功) |
💘 实践:使用Jenkins插件上传制品(把信息写死)(测试成功)-2023.6.28 |
💘 实践:使用Jenkins插件上传制品(读取POM文件上传制品)(测试成功)-2023.6.28 |
💘 扩展: 可以在Jenkins页面添加参数, 让用户输入后进行发布(测试成功)-2023.6.28 |
💘 实践:Jenkins插件获取包路径-2023.6.29(测试成功) |
💘 实践:CI综合实践-2023.6.29(测试成功) |
1、Nexus基本功能简介
- 实验软件(无)
- 创建
proxy-aliyun-maven
仓库:仓库类型选择proxy
,制品策略类型选择Release
,其他默认。
- 编辑maven构建节点的
settings.xml
文件,配置阿里云代理仓库地址
[root@devops conf]#vim /usr/local/apache-maven-3.8.5/conf/settings.xmlhttps:<url>http:[root@devops conf]#rm -rf /data/maven_build_cache/*
[root@devops conf]#vim /usr/local/apache-maven-3.8.5/conf/settings.xml
- 测试效果:
来到一个java项目里,使用maven进行测试效果:
[root@devops devops4-maven-service-master]#pwd/root/devops4-maven-service-master[root@devops devops4-maven-service-master]#lsbuild.shmvnwmvnw.cmdpom.xmlREADME.mdsonar-project.propertiessrc[root@devops devops4-maven-service-master]#mvn clean package
此时会报一个错误的,这里我们要配置下权限:
这种公网的,我们一般不加权限:
再次构建,观察效果:
可以看到能够正常下载。
- 来到这里也是可以看到下载的包:
测试成功。😘
2.搭建制品库(本地仓库 依赖包)
本地仓库:以Maven为例:
- RELEASE类型仓库(存放制品稳定版) 这个里面的包一般是需要手动指定的;
- SNAPSHOT类型仓库(存放制品开发版) 这个里面的包一般是自动生成版本号的;
切记:release类型的仓库只能存放release版本的包。不能将release类型的包上传到snapshot仓库,同理snapshot类型的包也不能上传到release类型的仓库中。
- 新建raw类型的仓库: raw可以理解为普通的文件存储;
raw格式就是一块普通的存储。(制品就传到这种类型的仓库里去)
① 创建Maven本地仓库(依赖)
💘 实践:创建Maven本地仓库(依赖)-2022.6.10(测试成功) |
- 创建仓库:
选择hosted类型:
- 定义和配置仓库的信息: 名称、存储、是否允许重新上传:
最后点击Create repositry
:
- 观察效果:
- 同理,我们再创建一个
devops4-release
的本地仓库:
测试完成。😘
② 创建Raw本地仓库(制品)
💘 实践:创建Raw本地仓库(制品)(测试成功)-2022.6.10 |
- 创建仓库:
选择raw(hosted)类型:
填写仓库名,并创建:
- 观察效果:
- 模拟上传一个图片:
测试结束。😘
4、CI流水线中集成制品库
1.使用管理页面上传制品
页面很方便上传,但是有时候不太好用...例如出现上传失败等问题(暂时无法解决,不同版本的nexus有些api不对应的坑)。
💘 实践:使用管理页面上传制品(测试成功)-2023.6.27 |
- 我们来创建
maven-devops6-release
和maven-devops6-snapshot
2个maven仓库
- 这次来手动上传下jenkins agent的
agent.jar
包。
- 先来模拟一次报错提示
我们指定jar包Version
是1.1.1-SNAPSHOT
,但是我们往RELEASE
类型的仓库上传,肯定就会报错的啦。
- 我们改变下这里的Version字段内容,然后再次上传,观察下现象
此时,就可以正常上传成功了。
2.使用maven指令上传制品
① 方法1:使用mvn命令上传制品(自定义pom信息(灵活))
💘 实践:使用mvn命令上传制品(自定义pom信息(灵活))-2022.6.11 |
- 实验环境
sonatype/nexus3:3.53.0apache-maven-3.9.2
实验软件(无)
上传制品之前, 肯定得确定目标仓库是存在的。 如果不存在我们可以新建一个 hosted类型的maven仓库。
- 仓库已经有了, 需要更新maven的配置文件,在settings.xml中添加仓库的认证信息。如下:
<server><id>mymaven</id><username>admin</username><password>admin123</password></server>
[root@devops ~]#vim /usr/local/apache-maven-3.8.5/conf/settings.xml<server><id>mymaven</id><username>admin</username><password>admin123</password></server>
- 上传制品前记得先要编译构建下的:
[root@devops ~]#cd[root@devops ~]#cd devops4-maven-service-master[root@devops devops4-maven-service-master]#lsbuild.shmvnwmvnw.cmdpom.xmlREADME.mdsonar-project.propertiessrctarget[root@devops devops4-maven-service-master]#mvn clean package
[root@devops devops4-maven-service-master]#pwd/root/devops4-maven-service-master[root@devops devops4-maven-service-master]#lsbuild.shmvnwmvnw.cmdpom.xmlREADME.mdsonar-project.propertiessrctarget[root@devops devops4-maven-service-master]#ls target/classesdemo-0.0.1-SNAPSHOT.jardemo-0.0.1-SNAPSHOT.jar.originalmaven-archiver
- 开始上传:
注意使用mvn deploy 发布时,-DrepositoryId
参数的值要与上面配置文件中的<server>
标签中的<id>
一致。不然会出现401,用户认证失败的问题。
mvndeploy:deploy-file-DgroupId=xxxxxx#pom中的groupId-DartifactId=xxxxxx#pom中的artifactId-Dversion=xxxxxx#pom中的版本号version-Dpackaging=xxxxxx#pom中打包方式-Dfile=xxxxxx#本地文件-Durl=xxxxxx#仓库url-DrepositoryId=xxxxxx#对应的是setting.xml(认证)
Maven上传报错, 401 可以确定是认证的错误。 需要检查认证信息。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file (default-cli) on project demo:Failed to deploy artifacts:Could not transfer artifact com.devops:zeyang:jar:1.1.1 from/to remote-repository (http:-DgroupId=com.devops \-DartifactId=xyy \-Dversion=1.1.1-snapshot \-Dpackaging=jar \-Dfile=target/demo-0.0.1-SNAPSHOT.jar \-Durl=http:-DrepositoryId=mymaven
- 我们再次修改下参数观察下效果:
mvndeploy:deploy-file\-DgroupId=com.devops \-DartifactId=xyy \-Dversion=1.1.1-SNAPSHOT \-Dpackaging=jar \-Dfile=target/demo-0.0.1-SNAPSHOT.jar \-Durl=http:-DrepositoryId=mymaven#注意:默认是会生成pom文件的。#如果不想生成pom文件,则可以使用如下选项-DgeneratePom=false
这里的
-Dversion=1.1.1-SNAPSHOT
SNAPSHOT一定要大写才行的!否则会被认为是release类型的制品,当然也就不能上传到snapshot仓库了。
可以看到,本次上传成功了:
备注:Pom文件就是个坐标。
- 验证:制品已经上传成功了。
测试成功。😘
② 方法2:直接读取pom文件(扩展)
💘 实践:直接读取pom文件(扩展)-2022.6.11(测试成功) |
- 实验环境
- 默认项目下是已经有
pom.xml
文件了:
sonatype/nexus3:3.53.0apache-maven-3.9.2
- 实验软件(无)
[root@devops devops4-maven-service-master]#lsbuild.shmvnwmvnw.cmdpom.xmlREADME.mdsonar-project.propertiessrctarget[root@devops devops4-maven-service-master]#cat pom.xml
- 这里直接使用命令上传:
mvndeploy:deploy-file\-DgeneratePom=true \-DrepositoryId=mymaven \-Durl=http:-DpomFile=pom.xml \-Dfile=target/demo-0.0.1-SNAPSHOT.jar
- 验证:
测试成功。😘
⚠️ FAQ:
release类型的仓库只能上传release版本的包。如果你尝试用snapshot包上传到release类型的仓库时会遇到这些错误的。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file (default-cli) on project demo:Failed to deploy artifacts:Could not transfer artifact com.example:demo:jar:0.0.1 from/to maven-hosted (http:<artifactId>myapp</artifactId><version>0.0.2-SNAPSHOT</version>//改成0.0.2-RELEASE
3.使用Jenkins插件上传制品
① 方法1:使用Jenkins插件上传制品(把信息写死)
💘 实践:使用Jenkins插件上传制品(把信息写死)(测试成功)-2023.6.28 |
- 安装插件:
Nexus Aritifact Uploader
- 使用片段生成器生成DSL:
找一个pipeline项目,生成流水线脚本:
新建一个nexus凭据:
生成代码:
nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/xxx.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'
调整下格式:
nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/xxx.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'
- 这边来到jenkins的
devops6-maven-service
项目里,先跑一次流水线看下有问题没:
可以看到流水线是ok的。
- 我们再来写一下流水线代码:
stage("PushArtifact"){steps{script{PushArtifactByPlugin()}}}defPushArtifactByPlugin(){nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/demo-0.0.1-SNAPSHOT.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'}
然后把这个代码放到上面项目的回放里,跑一次:
@Library("devops06@main") _defbuild =neworg.devops.Build()defsonar =neworg.devops.Sonar()currentBuild.displayName ="${env.branchName}-commitID"currentBuild.description ="Trigger by user jenkins \nbranch:${env.branchName}"pipeline {agent {label "build"}options {skipDefaultCheckout true} stages{stage("CheckOut"){steps{script{build.CheckOut()}}}stage("Build"){steps{script{build.Build()}}} stage("CodeScan"){when {environment name:'skipSonar',value:'false'}steps{script{sonar.SonarScannerByPlugin() }}}stage("PushArtifact"){steps{script{PushArtifactByPlugin()}}}}}defPushArtifactByPlugin(){nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/demo-0.0.1-SNAPSHOT.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'}
可以看到,上传制品成功了:
- 下载制品,点击链接,下载就ok了。
测试成功。😘
② 方法2:使用Jenkins插件上传制品(读取POM文件上传制品)
💘 实践:使用Jenkins插件上传制品(读取POM文件上传制品)(测试成功)-2023.6.28 |
- 在
devops6-maven-service
gitlab项目里编辑下pom.xml
文件,添加packaging
选项并提交。
<packaging>jar</packaging>
- 编写pipeline代码
@Library("devops06@main") _defbuild =neworg.devops.Build()defsonar =neworg.devops.Sonar()currentBuild.displayName ="${env.branchName}-commitID"currentBuild.description ="Trigger by user jenkins \nbranch:${env.branchName}"pipeline {agent {label "build"}options {skipDefaultCheckout true} stages{stage("CheckOut"){steps{script{build.CheckOut()}}}stage("Build"){steps{script{build.Build()}}} stage("CodeScan"){when {environment name:'skipSonar',value:'false'}steps{script{sonar.SonarScannerByPlugin() }}}stage("PushArtifact"){steps{script{PushArtifactByPluginPOM()}}}}}defPushArtifactByPlugin(){nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/demo-0.0.1-SNAPSHOT.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'}defPushArtifactByPluginPOM(){POM=readMavenPom file:'pom.xml'println(POM)println("GroupID:${POM.groupId}")println("ArtifactID:${POM.artifactId}")println("Version:${POM.version}")println("Packaging:${POM.packaging}")env.artifactId ="${POM.artifactId}"env.packaging ="${POM.packaging}"env.groupId ="${POM.groupId}"env.art_version ="${POM.version}"env.art_name ="${env.artifactId}-${env.art_version}.${env.packaging}"nexusArtifactUploader artifacts:[[artifactId:"${env.artifactId}",classifier:'',file:"target/${env.art_name}",type:"${env.packaging}"]],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:"${env.groupId}",nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:"${env.art_version}"}
- 在回放里运行
发现报错:
将项目里的pom文件改成RELEASE版本。
将
改成
然后再次运行:
又一次报错,提示:status:400 Repository does not allow updating assets:maven-devops6-release
应该是nexus3仓库里之前已经存在了这个包。
我们这里再改下version:
再次运行:
这次就运行成功了。
- 然后写到共享库里,再次运行测试
构建成功。
- 也可以修改上面这个版本,利用函数传参来演示
pipeline代码:
@Library("devops06@main") _defbuild =neworg.devops.Build()defsonar =neworg.devops.Sonar()currentBuild.displayName ="${env.branchName}-commitID"currentBuild.description ="Trigger by user jenkins \nbranch:${env.branchName}"pipeline {agent {label "build"}options {skipDefaultCheckout true} stages{stage("CheckOut"){steps{script{build.CheckOut()}}}stage("Build"){steps{script{build.Build()}}} stage("CodeScan"){when {environment name:'skipSonar',value:'false'}steps{script{sonar.SonarScannerByPlugin() }}}stage("PushArtifact"){steps{script{pomData =readMavenPom file:'pom.xml'buName ="${JOB_NAME}".split("-")[0]repoName ="maven-${buName}-release"file ="target/${pomData.artifactId}-${pomData.version}.${pomData.packaging}"PushArtifactByPluginPOM(pomData.artifactId,file,pomData.packaging,pomData.groupId,repoName,pomData.version)}}}}}defPushArtifactByPlugin(){nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/demo-0.0.1-SNAPSHOT.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'}defPushArtifactByPluginPOM(artifactId,file,type,groupId,repoName,version){println(artifactId)println("${file},${type},${groupId},${repoName},${version}")nexusArtifactUploader artifacts:[[artifactId:artifactId,classifier:'',file:file,type:type]],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:groupId,nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:repoName,version:version }
再次运行:
发现这个方法也是ok的。(haha,函数方式感觉nb一点,那这里就采用函数方式了哦。😂)
然后把这部分代码放到共享库里,再次测试下:
符合预期。
此时共享库里玩转代码如下: PushArtifact.groovy
文件:
packageorg.devopsdefPushArtifactByPlugin(){nexusArtifactUploader artifacts:[[artifactId:'demo-app',classifier:'',file:'target/demo-0.0.1-SNAPSHOT.jar',type:'jar']],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:'com.devops6',nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:'maven-devops6-release',version:'1.1.1'}defPushArtifactByPluginPOM(artifactId,file,type,groupId,repoName,version){println(artifactId)println("${file},${type},${groupId},${repoName},${version}")nexusArtifactUploader artifacts:[[artifactId:artifactId,classifier:'',file:file,type:type]],credentialsId:'3404937d-89e3-4699-88cf-c4bd299094ad',groupId:groupId,nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:repoName,version:version }
Jenkinsfile
文件:
@Library("devops06@main") _defbuild =neworg.devops.Build()defsonar =neworg.devops.Sonar()defpushartifact =neworg.devops.PushArtifact()currentBuild.displayName ="${env.branchName}-commitID"currentBuild.description ="Trigger by user jenkins \nbranch:${env.branchName}"pipeline {agent {label "build"}options {skipDefaultCheckout true} stages{stage("CheckOut"){steps{script{build.CheckOut()}}}stage("Build"){steps{script{build.Build()}}} stage("CodeScan"){when {environment name:'skipSonar',value:'false'}steps{script{sonar.SonarScannerByPlugin() }}}stage("PushArtifact"){steps{script{pomData =readMavenPom file:'pom.xml'buName ="${JOB_NAME}".split("-")[0]repoName ="maven-${buName}-release"file ="target/${pomData.artifactId}-${pomData.version}.${pomData.packaging}"pushartifact.PushArtifactByPluginPOM(pomData.artifactId,file,pomData.packaging,pomData.groupId,repoName,pomData.version)}}} }}
测试完成。😘
扩展: 可以在Jenkins页面添加参数, 让用户输入后进行发布
💘 扩展: 可以在Jenkins页面添加参数, 让用户输入后进行发布(测试成功)-2023.6.28 |
测试过程如下:
- 改写代码:
@Library("mylib@main") _ importorg.devops.*defcheckout =newCheckout() defbuild =newBuild()defunittest =newUnitTest()defsonar =newSonar()defgitcli =newGitLab()pipeline {agent {label "build"}options {skipDefaultCheckout true}stages{stage("Checkout"){steps{script {println("GetCode")checkout.GetCode("${env.srcUrl}","${env.branchName}")}}}stage("Build"){steps{script{println("Build")sh "${env.buildShell}"}}}stage("CodeScan"){when {environment name:'skipSonar',value:'false'}steps{script{profileName ="${JOB_NAME}".split("-")[0]sonar.Init("${JOB_NAME}","java",profileName)commitID =gitcli.GetCommitID()groupName =profileNameprojectID =gitcli.GetProjectID("${JOB_NAME}",groupName)sonar.CodeScan("${env.branchName}",commitID,projectID)}}}stage("PushArtifact"){steps{script{buName ="${JOB_NAME}".split("-")[0]repoName ="${buName}-snapshot"file ="target/${env.artifactId}-${env.version}.${env.packaging}"PushArtifactByNexusPlugin(env.artifactId,file,env.packaging ,env.groupId,repoName,env.version)}}}}}defPushArtifactByNexusPlugin(artifactId,file,type,groupId,repoName,version){println(artifactId)println("${file},${type},${groupId},${repoName},${version}")nexusArtifactUploader artifacts:[[artifactId:artifactId,classifier:'',file:file,type:type]],credentialsId:'2b44f51a-2374-4275-aeed-b720f4fbf937',groupId:groupId,nexusUrl:'172.29.9.101:8081',nexusVersion:'nexus3',protocol:'http',repository:repoName,version:version }
- 在流水线里添加字符参数和选项参数:
- 开始构建:
观察效果:
可以看到制品被成功上传到制品库了:
测试结束。😘
Jenkins插件获取包路径
发布其实就是下载制品,然后将制品发送到目标主机,最后通过脚本或者指令启动程序。
这个其实没多大意义。
💘 实践:Jenkins插件获取包路径-2023.6.29(测试成功) |
- 实验环境
gitlab-ce:15.0.3-ce.0jenkins:2.346.3-2-lts-jdk11sonarqube:9.9.0-communitynexus3:3.53.0
- 实验软件(无)
下面是下载制品的示例:
curlhttp:tags:-"${RUNNER_TAG}"stage:pushartifact rules:-if:'$RUN_TYPE =="CI"'when:always-when:neverscript:|-if[[${PROJECT_TYPE} =="java"]];thenpkgName=`ls target/ | grep -e "jar$"`cd target/newPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}.jarfilePath=${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}#Dir/buName/serviceName/version/serviceName-version.xxxmv ${pkgName} ${newPkgName}curl -X POST"http:-H "accept:application/json"\-H "Content-Type:multipart/form-data"\-F "raw.directory=${filePath}"\-F "raw.asset1=@${newPkgName};type=application/java-archive"\-F "raw.asset1.filename=${newPkgName}"-u admin:admin123elseecho "PROJECT_TYPE ERROR [java]"fi
📍 本次测试过程
- 先跑一次流水线,看下效果:
报错了:
这里之前是配置过用户名和密码的了:
后面还要看下这个容器:……要重装下的!!!!
- 这里先把代码扫描给跳过:
再跑一次流水线:
- 现在开始写代码:
找一下gitlabci的预定义环境变量
此时,在RELEASE-1.1.1里加一些代码,并提交:
符合预期。
- 此时有个问题,那么jenkins里再跑一次CD,会下载哪个包呢?
可以看到拿的是最新那个包。
以上完整代码如下:
.pipelineInit:tags:-"${RUNNER_TAG}"stage:.prevariables:GIT_CHECKOUT:"true"##局部开启作业的代码下载script:-ls -l .cibuild:tags:-"${RUNNER_TAG}"stage:buildscript:-echo "${BUILD_SHELL}"-${BUILD_SHELL}artifacts:paths:-${ARTIFACT_PATH}.citest:tags:-"${RUNNER_TAG}"stage:testscript:-echo "${TEST_SHELL}"-${TEST_SHELL}# artifacts:# reports:# junit:${TEST_REPORTS}.codescan:tags:-"${RUNNER_TAG}"stage:codescanscript:|-/usr/local/sonar-scanner/sonar-scanner-4.7.0.2747-linux/bin/sonar-scanner \-Dsonar.login=${SONAR_USER} \-Dsonar.password=${SONAR_PASSWD} \-Dsonar.projectVersion=${CI_COMMIT_BRANCH}\-Dsonar.branch.name=${CI_COMMIT_BRANCH} \-Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA} \-Dsonar.gitlab.ref_name=${CI_COMMIT_BRANCH} \-Dsonar.gitlab.project_id=${CI_PROJECT_ID} \-Dsonar.dynamicAnalysis=reuseReports \-Dsonar.gitlab.failure_notification_mode=commit-status \-Dsonar.gitlab.url=http:-Dsonar.gitlab.user_token=${GITLAB_TOKEN} \-Dsonar.gitlab.api_version=v4.pushartifact:tags:-"${RUNNER_TAG}"stage:pushartifact script:|-if[[${PROJECT_TYPE} =="java"]];thenpkgName=`ls target/ | grep -e "jar$"`cd target/#Dir/buName/serviceName/version/serviceName-version.xxxmv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}.jarcurl -X POST"http:-H "accept:application/json"\-H "Content-Type:multipart/form-data"\-F "raw.directory=/${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}"/\-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}.jar;type=application/java-archive"\-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}.jar"-u admin:admin123elseecho "PROJECT_TYPE ERROR [java]"fi
include:-project:'devops4/devops4-gitlablib-service'ref:mainfile:-'/jobs/CI.yaml'workflow:rules:-if:$CI_PIPELINE_SOURCE=="web"when:always-if:$CI_COMMIT_BEFORE_SHA=="0000000000000000000000000000000000000000"when:never-when:alwaysvariables:GIT_CHECKOUT:"false"## 全局关闭作业代码下载BUILD_SHELL:"sh -x build.sh"## 构建命令TEST_SHELL:"/usr/local/apache-maven-3.8.5/bin/mvn test "## 测试命令ARTIFACT_PATH:"target