持续集成交付CICD:GitLabCI上传Nexus制品

目录

一、实验

1.GitLabCI上传Nexus制品

2.优化GitLabCI(引用系统变量)

3.添加if条件判断项目类型

4.优化GitLabCI(模板类)

二、问题

1.GitLabCI获取jar文件失败

2. GitLabCI获取流水线项目命名空间失败

3.GItLab Package如何实现上传至本地仓库


一、实验

1.GitLabCI上传Nexus制品

(1)进入共享库

(2)修改流水线,提交到master

include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永远不执行- if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情况永远执行- when: always#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:GIT_CHECKOUT: "false"BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令ARTIFACT_PATH: "target/*.jar"                                  ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-pkgName=`ls target/ | grep -e "^maven.*jar$"`curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/tmp" \-F "raw.asset1=@target/${pkgName};type=application/java-archive" \-F "raw.asset1.filename=${pkgName}" -u admin:Admin123

(2) maven项目开始运行流水线

(3)运行

(4)成功

(5)查看日志

(6)Nexus查看

2.优化GitLabCI(引用系统变量)

(1) 优化流水线,提交到master

include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永远不执行- if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情况永远执行- when: always#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:GIT_CHECKOUT: "false"BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令ARTIFACT_PATH: "target/*.jar"                                  ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-pkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123

 (2) maven项目开始运行流水线

(3)运行

(4) 成功

(5)查看日志

(6)Nexus查看

3.添加if条件判断项目类型

(1)修改流水线,提交到master

include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永远不执行- if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情况永远执行- when: always#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:GIT_CHECKOUT: "false"  ## 全局关闭作业代码下载PROJECT_TYPE: "java"   ## 定义项目类型BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令ARTIFACT_PATH: "target/*.jar"                                  ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-if [[ ${PROJECT_TYPE} == "java" ]];thenpkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123elseecho "PROJECT_TYPE ERROR [java]"fi

  (2) maven项目开始运行流水线

(3)运行

(4) 成功

(5)查看日志

(6)Nexus查看

4.优化GitLabCI(模板类)

(1)修改流水线与新增模板类,提交到master

CI.yaml

.pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: "true"script:- ls -l.cibuild:tags:- buildstage: buildscript:- echo "${BUILD_SHELL}"- ${BUILD_SHELL}artifacts:paths:- ${ARTIFACT_PATH}.citest:tags:- buildstage: testscript:- echo "${TEST_SHELL}"- ${TEST_SHELL}# artifacts:# reports:#   - junit: ${TEST_REPORTS}.sonarscan:tags: - buildstage: sonarscanscript: |-sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \-Dsonar.projectKey=${CI_PROJECT_NAME}\-Dsonar.projectName=${CI_PROJECT_NAME} \-Dsonar.projectVersion=${CI_COMMIT_SHA} \-Dsonar.login=${SONAR_AUTH_TOKEN} \-Dsonar.ws.timeout=30 \-Dsonar.projectDescription=${CI_PROJECT_TITLE} \-Dsonar.links.homepage=${CI_PROJECT_URL} \-Dsonar.links.ci=${CI_PIPELINE_URL} \-Dsonar.sources=src \-Dsonar.sourceEncoding=UTF-8 \-Dsonar.java.binaries=target/classes \-Dsonar.java.test.binaries=target/test-classes \-Dsonar.java.surefire.report=target/surefire-reports \-Dsonar.core.codeCoveragePlugin=jacoco \-Dsonar.jacoco.reportPaths=target/jacoco.exec.pushartifact:tags:- buildstage: pushartifactscript:|-if [[ ${PROJECT_TYPE} == "java" ]];thenpkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123elseecho "PROJECT_TYPE ERROR [java]"fi

gitlab-ci.yaml

​
include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永远不执行- if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情况永远执行- when: always#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:GIT_CHECKOUT: "false"  ## 全局关闭作业代码下载PROJECT_TYPE: "java"   ## 定义项目类型BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令ARTIFACT_PATH: "target/*.jar"                                  ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:extends:- .pushartifact​

  (2) maven项目开始运行流水线

(3)运行

(4) 成功

(5)查看日志

(6)Nexus查看

二、问题

1.GitLabCI获取jar文件失败

(1)报错

(2)原因分析

正则表达式输入有误

(3)解决方法

修改正则表达式。

修改前:

pkgName=`ls target/ | grep -e "jar$"`

修改后:

pkgName=`ls target/ | grep -e "^maven.*jar$"`

成功:

2. GitLabCI获取流水线项目命名空间失败

(1)报错

(2)原因分析

变量错误

(3)解决方法

修改引用流水线变量。

修改前:

-F "raw.directory=/${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \

修改后:

-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \

成功:

3.GItLab Package如何实现上传至本地仓库

(1)版本

GItLab Package 需要GitLab 13.5及以上版本实现

(2)curl命令上传到GItLab Package

curl --header "PRIVATE-TOKEN: 4b54764fd071175387e94385a0d6c5" \--upload-file sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar \"http://192.168.204.8/api/v4/projects/14/packages/generic/devops03-maven5-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar?status=default"

(3)流水线上传到GItLab Package

CI.yaml

.pushartforgitlab:tags:- buildstage: pushartifact  script:|- if [[ ${PROJECT_TYPE} == "java" ]];thennewPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarpkgName=`ls target/ | grep -e "jar$"`cd target/mv ${pkgName} ${newPkgName}curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \--upload-file ${newPkgName} \"http://192.168.204.8/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/${newPkgName}?status=default"elseecho "PROJECT_TYPE ERROR [java]"fi

gitlab-ci.yaml


pushartifact:extends:- .pushartforgitlab

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266799.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache(httpd)安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux操作系统,网页服务器Apache,…

大模型应用_ChatGPT-Next-Web

1 用后感 这个工具,我也是用了好长时间,就是感觉如果不点亮一颗星,自己就不是人了的那种。 一开始在国内用 ChatGPT 非常麻烦,就买了一个套壳的服务,他使用的界面就是 ChatGPT-Next-Web,我和朋友们都觉得这…

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…

西南科技大学数字电子技术实验四(基本触发器逻辑功能测试及FPGA的实现)FPGA部分

实验目的1、掌握基本RS触发器、集成D触发器和JK触发器的逻辑功能及测试方法。 2、熟悉D触发器和JK触发器的触发方法。 3、熟悉用JK和D触发器构成其他功能触发器的方法。 4、学会用FPGA实现本实验内容。 实验原理1、D触发器 Qn+1 = D 2、JK触发器 3、RS触发器 程序清单(每…

json.loads和eval 速度对比

json.loads和eval 速度对比 代码1结果图代码2参考地址 代码1 import json import time import pandas as pddata_sets pd.read_pickle("val_token_id.pandas_pickle") data_sets[str(i) for i in data_sets] starttime.time() [json.loads(i) for i in data_sets] …

sudo -i 和 sudo -s

一、sudo xxx 以root权限执行单条命令 二、sudo -i 进入一个持续的root环境,以root权限执行命令,但并不是切换到root用户 三、sudo -s 也是进入一个持续的root环境,以root权限执行命令,和sudo -i的区别是保存了原来普通用…

Docker创建镜像的方式---Dockerfile

Dockerfile可以创建自定义镜像。包括配置文件,挂载点,对外暴露的端口,设置环境变量。 Docker创建镜像的方式 1、 基于已有镜像创建:根据官方提供的镜像源,创建镜像。然后拉起容器。是一个白板智能提供基础的功能&…

RPG:一种面向Rust库的模糊测试目标自动生成技术(ICSE‘24)

- 这是我们在ICSE’24的论文RPG: Rust Library Fuzzing with Pool-based Fuzz TargetGeneration and Generic Support [1] 的科普版本。- 插播一条广告:西安电子科技大学广州研究院 ICTT(GZ) 实验室长期接收硕士、博士、博士后、教师岗位申请,欢迎勤奋、…

Linux:Oracle19c安装创建仓库

环境介绍 操作系统:centos7.9 使用yum:公网yum源 内核版本:3.10.0-1160.el7.x86_64 运行内存:4G swap交换内存:8G ssh软件: 软件包:LINUX.X64_193000_db_home.zip 下载链接: 适用于…

鸿蒙生态千帆起:从者众,行则远

“轻舟已过万重山”,鸿蒙的成长速度惊人,一定程度上打破了iOS和安卓二分天下的格局。短短四年时间,搭载华为鸿蒙系统的生态设备数已经突破7亿,开发者突破220万。据Counterpoint数据显示,华为HarmonyOS系统在中国的市场…

IoTDB JavaAPI

文章目录 使用样例Java使用样例 官方已经给出了相关使用Demo,下载地址为: https://github.com/apache/iotdb 直接拉取相对应版本的源码 使用样例 Java使用样例 代码位置 iotdb/example/session/src/main/java/org/apache/iotdb/SessionExample.java iotdb/exa…

HyperGCN笔记

1 Title HyperGCN: A New Method of Training Graph Convolutional Networks on Hypergraphs(Naganand Yadati、Prateek Yadav、Anand Louis、Madhav Nimishakavi、Vikram Nitin、Partha Talukdar)【NeurIPS 2019】 2 Conclision This paper proposes H…