jenkins通过mvn deploy上传依赖到私有仓库 流水线编码实现

161 阅读3分钟

jenkins服务器需要配置jdk和maven,其中需要将maven中的setting文件仓库地址配置好

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <localRepository>/usr/share/maven-repo</localRepository>

    <pluginGroups>
    </pluginGroups>

    <proxies>
    </proxies>

    <servers>
        <server>
            <id>aaa-release</id>
            <username>myname</username>
            <password>mypwd</password>
        </server>
        <server>
            <id>bbb-snapshot</id>
            <username>myname</username>
            <password>mypwd</password>
        </server>
    </servers>
    <mirrors>
        <mirror>
            <id>aaa-release</id>
            <mirrorOf>*</mirrorOf>
            <url>http://nexus2.gacrnd.com/repository/aaa-release/</url>
        </mirror>
        <mirror>
            <id>bbb-snapshot</id>
            <mirrorOf>*</mirrorOf>
            <url>http://nexus2.gacrnd.com/repository/bbb-snapshot/</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>nexus</id>
            <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>
            <repositories>
                <repository>
                    <id>aaa-release</id>
                    <url>http://nexus2.gacrnd.com/repository/aaa-release/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>bbb-snapshot</id>
                    <url>http://nexus2.gacrnd.com/repository/bbb-snapshot/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>aaa-release</id>
                    <url>http://nexus2.gacrnd.com/repository/aaa-release/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>bbb-snapshot</id>
                    <url>http://nexus2.gacrnd.com/repository/bbb-snapshot/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>


单独的一个项目中的pom文件需要配置相关的仓库配置


<profiles>
    <profile>
        <id>nexus</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>aaa-releases</id>
                <url>http://nexus2.gacrnd.com/repository/aaa-release/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>bbb-snapshots</id>
                <url>http://nexus2.gacrnd.com/repository/bbb-snapshot/</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

pipeline {
agent any
environment {
def repourl = 'https://gitlab.gxxxd.com/bdp-doxxin/basexxe/code/dataxxxry/schexxls.git'

def authCode ='1b4xxxxxxxxx5b5da51'
def jenkinsWorkspace = '/var/lib/jenkins/workspace/'
}
stages {stage ("begin') {
steps (withcredentialsllaitusernamasswordicredentialsid: 9dxxx63c4xxxxxxxxx5c8xxfx4', gitoolName: 'Default')]){
sh """
mvn -version
pwd

# git拉取代码,这种方式可以
mkdir -p /var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test
docker ps -a

docker rm -f maven-xxxx-json-schema-inferrer

#**`-dit`**:这些选项一起使用:

#-   `-d`:以后台(分离)模式运行容器。
#-   `-i`:允许与容器交互(即使未连接也保持STDIN打开)。
#-   `-t`:分配伪TTY(伪终端)。

#**`maven:3.8.4-openjdk-8-slim`**:这是要使用的Docker镜像,指定了Maven版本(3.8.4)和基础镜像(openjdk-8-slim)

#**当你运行这个Docker命令时,Docker引擎会创建一个新的容器实例,该实例是基于`maven:3.8.4-openjdk-8-slim`镜像构建的。由于Docker镜像是预先构建好的,因此它包含了所有MavenOpenJDK的依赖项以及所需的文件系统结构。在这个命令中,`/bin/bash`是容器启动后要执行的命令,它将启动一个交互式的Bash shell。这意味着你可以在容器内部执行各种命令,例如构建项目、运行测试等
#**1.  **`-v /var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test/:/opt/code/test/`** :此选项将本地目录 `/var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test/` 挂载到容器的路径 `/opt/code/test/`。用于在主机和容器之间共享文件。
#1.  **`-v /var/lib/jenkins/workspace/xxxx-config/maven/:/usr/share/maven/conf`**:此选项将本地目录 `/var/lib/jenkins/workspace/xxxx-config/maven/` 挂载到容器的路径 `/usr/share/maven/conf`。通常用于提供Maven配置给容器。
#1.  **`-v /var/lib/jenkins/workspace/maven/repository/:/root/.m2/repository/`** :此选项将本地Maven存储库目录 `/var/lib/jenkins/workspace/maven/repository/` 挂载到容器的默认Maven存储库位置 `/root/.m2/repository/`。用于缓存Maven构建产物和依赖。



docker run --name maven-xxxx-json-schema-inferrer -dit \ 
-v /var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test/:/opt/code/test/ \
-v /var/lib/jenkins/workspace/xxxx-config/maven/:/usr/share/maven/conf \
-v /var/lib/jenkins/workspace/maven/repository/:/root/.m2/repository/ \
-w /opt/code/test/ \
maven:3.8.4-openjdk-8-slim /bin/bash

docker exec maven-xxxx-json-schema-inferrer sh -c "cd /opt/code/test/;rm -rf ./*;ls ./"

docker rm -f maven-xxxx-json-schema-inferrer

docker run --name maven-xxxx-json-schema-inferrer -dit \
-v /var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test/:/opt/code/test/ \
-v /var/lib/jenkins/workspace/xxxx-config/maven/:/usr/share/maven/conf \
-v /var/lib/jenkins/workspace/maven/repository/:/root/.m2/repository/ \
-w /opt /code /test / \
maven:3.8.4-openjdk-8-slim /bin/bash

docker exec maven-xxxx-json-schema-inferrer sh -c "cd /opt/code/test/;rm -rf ./*;ls ./"

docker rm -f maven-xxxx-json-schema-inferrer


rm -rf /var/lib/enkins/workspace/xxxx-json-schema-inferrer/test
mkdir -p /var/lib/jenkins/workspace/wanada-json-schema-inferrer/test
ls /var/lib/jenkins/workspace/xxxx-son-schema-inferrer/test


git clone https://gixxxxxmon/json-schema-inferrer.git  /var/lib/jenkins/workspace/xxxx-son-schema-inferrer/test

ls /var/lib/enkins/workspace/xxxx-json-schema-inferrer/test

#拉取maven配置
rm -rf /var/lib/jenkins/workspace/wanada-config
mkdir -p /var/lib/jenkins/workspace/wanada-config

git clone https://xxxx/xxxx-config.git /var/lib/jenkins/workspace/xxxx-config

ls /var/lib/jenkins/workspace/wanada-config


docker run --name maven-xxxx-json-schema-inferrer -dit  \
-v /var/lib/jenkins/workspace/xxxx-json-schema-inferrer/test/:/opt/code/test/ \
-v /var/lib/jenkins/workspace/xxxx-config/maven/:/usr/share/maven/conf \
-v /var/lib/jenkins/workspace/maven/repository/:/root/.m2/repository/ \
-w /opt/code/test / \
maven:3.8.4-openjdk-8-slim /bin/bash

docker exec maven-xxxx-json-schema-inferrer mvn clean deploy
docker exec maven-xxxx-json-schema-inferrer mvn clean package install -f pom.xml -Dmaven.test.skip-true

docker rm -f maven-xxxx-json-schema-inferrer
"""
echo 'Hello jenkins!
}
}
}
}
}

将以上三个配置都配置好后,代码在编译的时候就会把本身服务上传到私有仓库中