Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins(建议别用docker安装,坑太多)

docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime  --name my_jenkins --user=root jenkins/jenkins:2.449

坑1 打开xxx:8080 页面 一直在等待刷新
更换 /var/jenkins_home/hudson.model.UpdateCenter.xml 中的url为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

坑2 安装插件很慢 失败了一大堆

cd /var/jenkins_home/updates
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

查看登录密码

docker exec -i my_jenkins  cat /var/jenkins_home/secrets/initialAdminPassword

浏览器打开URL

http:///your-ip-addr:8089

2、安装Nexus制品库

docker run -d --name nexus_repo -p 8081:8081 sonatype/nexus3

查看登录密码

docker exec -i nexus_repo cat /nexus-data/admin.password

浏览器登录

http:///your-ip-addr:8081

在Nexus中创建存储库

在这一步中,您将在Nexus中创建一个Maven托管存储库,您的Jenkins将在其中上载“构建”工件。

步骤1:按照以下步骤创建托管存储库,并将其命名 maven-nexus-repo,将在本指南中使用。

从列表中选择 maven2,如下所示:

步骤2:在“ 创建存储库”页面上

  • 输入名称为 maven-nexus-repo

  • 在版本策略中,选择工件的类型。

  • 在“ 托管” 部分 下的“ 部署策略”中,选择“ 允许重新部署”。它将允许您多次部署应用程序。

步骤3:要创建新用户,请转到 信息中心>服务器管理员和配置>用户>创建用户。选择  恰好是默认领域的本地用户类型:

 

在“ 创建用户”页面中

  1. ID:输入所需的ID;在我们的案例中,它是Jenkins用户。

  2. 名字:输入所需的名字;就我们而言,就是Jenkins。

  3. :输入所需的名字;在我们的例子中是用户。

  4. 电子邮件:输入您的电子邮件地址。

  5. 状态:从下拉菜单中选择 有效

  6. 角色:确保将nx-admin 角色授予 用户。

至此,我们完成了Nexus Repository Manager的设置部分。让我们转到Jenkins在此处设置Nexus。

在Jenkins中安装和配置Nexus插件

在这里,您将为Jenkins中的Nexus安装并配置一些插件。为此,请转到Jenkins,然后转到 信息中心>管理Jenkins>管理插件>可用, 然后搜索并安装 Nexus Artifact Uploader 、pipeline-utility-steps这2个插件

在Jenkins中添加Nexus Repository Manager的用户凭据。转到 仪表板>凭证>系统>全局凭证(不受限制),如下所示:

接下来,将Maven安装,手动安装maven

1、进入docker容器,下载安装包

因容器使用的Debian系统,因此更换国内源

# 华为云 Huawei Cloud

sed -i 's@deb.debian.org@repo.huaweicloud.com@g' /etc/apt/sources.list.d/debian.sources

更新工具包

apt-get update
apt-get upgrade

Maven – Download Apache Maven

2、解压并设置变量

unzip apache-maven-3.9.6-bin.zip

#maven
export MAVEN_HOME=/opt/apache-maven-3.9.6
export PATH=$MAVEN_HOME/bin:$PATH

3、配置maven的setting.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <!-- 依赖存储地址-->
  <localRepository>/opt/repo</localRepository>
 
  <!-- 阿里云镜像地址-->
  <mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  </mirrors>
 
  <!-- 编译环境-->
  <profiles>
    <profile>
            <id>jdk1.8</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> 
                    <encoding>UTF-8</encoding> 
            </properties> 
    </profile>
  </profiles>
 
</settings>
 

5、仪表板>管理Jenkins>全局工具配置, 然后找到 Maven

创建一条Jenkins流水线

pipeline {
    agent any
    tools {
        maven "maven"
    }
    environment {
        NEXUS_VERSION = "nexus3"
        NEXUS_PROTOCOL = "http"
        NEXUS_URL = "192.168.50.14:8082"
        NEXUS_REPOSITORY = "maven-nexus-repo"
        NEXUS_CREDENTIAL_ID = "nexus-user"
    }
    stages {
        stage("Clone code from VCS") {
            steps {
                script {
                    git 'https://gitee.com/aminglinux/java-maven-demo.git';
                }
            }
        }
        stage("Maven Build") {
            steps {
                script {
                    sh "mvn package -DskipTests=true"
                }
            }
        }
        stage("Publish to Nexus Repository Manager") {
            steps {
                script {
                    pom = readMavenPom file: "pom.xml";
                    filesByGlob = findFiles(glob: "target/*.${pom.packaging}");
                    echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}"
                    artifactPath = filesByGlob[0].path;
                    artifactExists = fileExists artifactPath;
                    if(artifactExists) {
                        echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version ${pom.version}";
                        nexusArtifactUploader(
                            nexusVersion: NEXUS_VERSION,
                            protocol: NEXUS_PROTOCOL,
                            nexusUrl: NEXUS_URL,
                            groupId: pom.groupId,
                            version: pom.version,
                            repository: NEXUS_REPOSITORY,
                            credentialsId: NEXUS_CREDENTIAL_ID,
                            artifacts: [
                                [artifactId: pom.artifactId,
                                classifier: '',
                                file: artifactPath,
                                type: pom.packaging],
                                [artifactId: pom.artifactId,
                                classifier: '',
                                file: "pom.xml",
                                type: "pom"]
                            ]
                        );
                    } else {
                        error "*** File: ${artifactPath}, could not be found";
                    }
                }
            }
        }
    }
}

让我们逐一分解上述参数:

  • NEXUS_VERSION:在这里,我们必须提及Nexus的确切版本,可以是nexus2nexus3。在我们的情况下,它是的最新版本nexus3

  • NEXUS_PROTOCOL:对于本指南,我们使用了HTTP协议,但是,在正式生产的情况下,您将必须使用HTTPS。

  • NEXUS_URL:添加您的IP地址和端口号,以运行Nexus。确保您添加的Nexus实例详细信息没有提及协议,例如httpshttp

  • NEXUS_CREDENTIAL_ID:输入您先前在Jenkins中创建的用户ID,在本例中为 nexus-user-credentials

  • Git项目:在阶段阶段,我们使用了aminglinux/java-maven-demo

在完成管道设置的过程中,是时候开始Build我们的项目了。转到JenkinsNexus项目作业页面,然后单击立即构建。由于这是您的第一个构建,因此将需要一些时间。

一旦构建成功,在Jenkins控制台输出中,您将看到类似以下内容:

而在Nexus Repository Manager中,您会看到类似以下内容:

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

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

相关文章

Python使用 k 均值对遥感图像进行语义分割

本篇文章介绍K-means语义分割来估计 2000 年至 2023 年咸海水面的变化 让我们先看一下本教程中将使用的数据。这是同一地区的两张 RGB 图像,间隔 23 年,但很明显地表特性和大气条件(云、气溶胶等)不同。这就是为什么我决定训练两个独立的 k-Means 模型,每个图像一个。 首…

仰卧起坐计数,YOLOV8POSE

仰卧起坐计数&#xff0c;YOLOV8POSE 通过计算膝盖、腰部、肩部的夹角&#xff0c;计算仰卧起坐的次数

JavaScript爬虫进阶攻略:从网页采集到数据可视化

在当今数字化世界中&#xff0c;数据是至关重要的资产&#xff0c;而网页则是一个巨大的数据源。JavaScript作为一种强大的前端编程语言&#xff0c;不仅能够为网页增添交互性&#xff0c;还可以用于网页爬取和数据处理。本文将带你深入探索JavaScript爬虫技术的进阶应用&#…

[江苏工匠杯]easyphp

先看源码 <?php highlight_file(__FILE__); $key1 0; $key2 0; ​ $a $_GET[a]; $b $_GET[b]; ​ if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),-6,6)){$key1 1;}else{die("…

centos8作为虚拟机镜像时yum报错

使用yum安装时出现如下错误&#xff1a; Errors during downloading metadata for repository AppStream:- Status code: 404 for http://mirrors.cloud.aliyuncs.com/centos/8/AppStream/x86_64/os/repodata/repomd.xml (IP: 100.100.2.148) Error: Failed to download metad…

助力企业跨越地域限制,实现业务全球化与数字化升级

驱动跨行业数字化转型与全球化互联实践》 中国联通作为中国领先的电信运营商&#xff0c;在物联网领域不断创新&#xff0c;尤其在跨境物联网产品解决方案上取得了显著成果&#xff0c;已经成功服务于各行各业&#xff0c;实现了全球化业务的有效链接与智能化管理。以下将详述…

Day19 包装类 Integer底层

Day19 包装类 Integer底层 一、包装类 1、概念&#xff1a; 包装类&#xff08;Wrapper Class&#xff09;是一种用于将基本数据类型转换为对象的类。Java中的基本数据类型&#xff08;如int、char、boolean等&#xff09;是非对象的&#xff0c;为了能够在需要对象的上下文中…

mvn 相关命令汇总

1、需求 项目上一致是使用的mvn 进行打包, 对于项目上的一些mvn 命令&#xff0c;有时候会忘记&#xff0c;所以将mvn 汇总起来 2、命令汇总 ① mvn clean 将项目目录下的编译的文件清除掉,即target 文件夹的编译文件 ② mvn complie 编译项目的代码&#xff0c;生成class 文…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1&#xff0c;ISO镜像安装包 2&#xff0c;虚拟机&#xff08;建议使用ESXI虚拟机环境&#xff09; 如果是物理机安装&#xff0c;建议先给底层安装虚拟机系统esxi&#xff0c;再在上面安装方便以后的管理&#xff0c;如果你想物理机直接安装&a…

3.15消费者权益保护教育宣传活动怎样联系媒体投稿宣传?

在315金融消费者权益保护教育宣传活动中,想要有效地联系媒体报道并进行便捷宣传,可以通过以下步骤来利用智慧软文发布系统进行操作: 1. 准备宣传素材: - 制作高质量的新闻稿件,内容应围绕金融消费者权益保护的主题,包含活动的目的、特色、实施计划、预期影响、参与方式等细节;…

怎么看一手伦敦银多少钱?

做伦敦银投资的朋友需要搞清楚“一手伦敦银多少钱”的问题&#xff0c;这也是伦敦银交易的基础问题。为什么需要搞清楚这个基础问题呢&#xff1f;有些基础问题我们不需要搞懂&#xff0c;但是关于一手伦敦银多少钱却需要搞清楚&#xff0c;因为这决定了投资者的资金利用率。 关…

复合材料热压机比例阀放大器

复合材料热压机动作主要依赖于其内置的液压系统。是工业生产中常用的设备&#xff0c;通过施加高温和高压来实现对材料的压制成型。为了确保热压板能够精确地上下移动以及保持所需的压力&#xff0c;通常会使用液压系统来控制。液压系统中必不可少的需要比例阀来控制油缸的运行…

二进制1的个数(c++题解)

题目描述 统计一个十进制数中二进制1的个数 输入格式 一个int范围内的整数&#xff08;可能为负数&#xff09;。 输出格式 二进制1的个数。 样例 样例输入 复制2样例输出 复制1数据范围与提示 CPU是32位处理器 __________________________________________________…

0105行列式按行(列)展开-行列式-线性代数

在n阶行列式中&#xff0c;把 ( i , j ) 元 a i j (i,j)元a_{ij} (i,j)元aij​所在的第 i 行和第 j i行和第j i行和第j列划去后&#xff0c;留下来的 n − 1 n-1 n−1阶行列式叫做 ( i , j ) 元 a i j (i,j)元a_{ij} (i,j)元aij​的余子式&#xff0c;记作 M i j M_{ij} Mij​&…

APP内嵌微信H5支付完成后跳转浏览器问题如何解决

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; 在App内嵌微信H5支付完成后跳转到浏览器的场景中&#xff0c;涉及到了跨平台交互和支付流程的处理。这种情况通常会涉及到用户在微信H5支付页面完成支付后需要跳转到浏览器来展示支付结果或其他相关信息。以…

ReentrantLock的实现原理

ReentrantLock 是 Java 中的一个高级同步机制&#xff0c;它提供了比传统的 synchronized 方法和语句更灵活的锁定操作。ReentrantLock 实现了 Lock 接口&#xff0c;并且完全依赖于 AbstractQueuedSynchronizer (AQS) 的扩展来实现其同步行为。 ReentrantLock 特性 可重入: …

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法 一、需求二、实施步骤2.1 准备模型文件2.1.1 3D tiles模型2.1.2 3D Tiles标准文件格式 2.2 配置nginx server块2.2.1 Nginx能干啥 2.3 访问 三、实现效果 一、需求 利用三维渲染引擎Cesium加载3D tiles模型。 二、实…

(学习日记)2024.03.16:UCOSIII第十八节:任务的删除

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

下载JDK17版本详细教程(下载、安装、环境变量配置)

官网下载 Oracle 甲骨文中国 | 云应用和云平台 安装 更改自己的安装位置。点击下一步&#xff0c;记住自己的安装位置 环境配置 右键此电脑点击属性---高级系统设置----环境变量 在系统变量里面点击新建环境变量JAVA_HOME&#xff0c;下面填入自己的jdk安装地址&#xff0c…