jenkins-[mvn|gradle|go|npm|yarn]构建工具实践

root
233
文章
0
评论
2021年10月11日15:51:09 评论 8981字阅读29分56秒

jenkins-[mvn|gradle|go|npm|yarn]构建工具实践

Java项目构建Maven工具

初始化一个springboot项目 https://start.spring.io/

demo
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               └── DemoApplication.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

1.1 Maven

官网:http://maven.apache.org/download.cgi Maven是一个项目的构建依赖管理工具。通常项目的根目录会存在一个pom.xml文件(该文件用于定义项目的依赖包信息和构建配置)

项目生成

生成一个标准的maven项目:

  • 项目类型: Maven Project
  • 语言: Java
  • SpringBoot: 2.4.4 (版本)
  • Metadata
    • Group : 组信息
    • Artifact:包名称
    • Packging: 包格式(Jar、War)
  • Dependencies: 定义项目依赖(最后都会写入Pom.xml)

mave配置环境

提前安装好JDK, 然后安装apache-maven-3.8.1:

### 下载
wget  https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
or
https://mirrors.bfsu.edu.cn/apache/maven/maven-3/
tar zxf apache-maven-3.8.1-bin.tar.gz -C /usr/local/
cd /usr/local/apache-maven-3.8.1/
pwd  /usr/local/apache-maven-3.8.1


### 配置环境变量
vi /etc/profile
export M2_HOME=/usr/local/apache-maven-3.8.1
export PATH=$M2_HOME/bin:$PATH

source /etc/profile

### 验证

mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/apache-maven-3.8.1
Java version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: /usr/local/jdk8u282-b08/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.18.0-80.el8.x86_64", arch: "amd64", family: "unix"

 

maven常用命令

    • mvn clean 清理构建目录
    • mvn clean package 打包
    • mvn clean install 打包部署
    • mvn clean test 单元测试
    • mvn clean package -f ../pom.xml -f指定pom位置\
    • mvn clean package -DskipTests / -Dmaven.test.skip=true 跳过单测
    • mvn deploy 发布包到制品库

配置阿里maven源 、 本地仓库;

https://developer.aliyun.com/mvn/guide

##maven
[root@jeekins demo-grable]# ll /data/apache-maven-3.8.3/conf/settings.xml 
//本地仓库
<localRepository>/data/maven-cache</localRepository>

//私服仓库
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>

//阿里云仓库源
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

 

Jenkins集成

stage("build"){
    steps {
        script{
            sh "mvn clean package"
        }
    }
}

更加严谨的方式:使用绝对路径

//gitlab传递的数据{}
println("${webhookdata}")

def buildTools = ["maven": "/data/apache-maven-3.8.3/"]


//数据格式化
webhookdata = readJSON text: "${webhookdata}"

//提取仓库信息
env.srcUrl= webhookdata["project"]["git_http_url"]   //项目地址
env.branchName= webhookdata["ref"]-"refs/heads/"      // 分支
env.commitId= webhookdata["checkout_sha"]            //提交id
env.commitUser= webhookdata["user_username"]         // 提交人
env.userEmail = webhookdata["user_email"]            //邮箱

currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} "
currentBuild.displayName = "${env.commitId}"

pipeline{
    //指定运行此流水线的节点,指定标签的名字
    agent { node { label "build"}}
    stages{
        //阶段1 获取代码
        stage("CheckOut"){
            //定义阶段1的变量
            environment {
                NAME = "hwf01"
                VERSION = "1.1.11"
                ENVTYPE = "DEV1"
            }
            steps{
                script{
                    //branchName = "${params.branchName}"
                    //srcUrl = "${params.srcUrl}"
                    checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]],
                              extensions: [],
                              userRemoteConfigs: [[credentialsId: 'gitlab-root',
                                                   url: "${env.srcUrl}"]]])
                }
            }
        }
        stage("Build") {
            steps {
                script {
                    println("运行构建")
                    //要是想获取input的值,打印他的环境变量
                    sh "${buildTools["maven"]}/bin/mvn clean package -DskipTests -f demo/pom.xml \
                        -s settings.xml"
                }
            }
        }
        stage("Test"){
            steps{
                script {
                    println("运行测试")
                    sh "${buildTools["maven"]}/bin/mvn clean test -f demo/pom.xml \
                        -s settings.xml"
                    junit 'demo/target/surefire-reports/*.xml'
                }
            }
        }

    }
    post {
        always{
            script{
                println("流水线结束后,经常做的事情")
                //EmailUser("${env.userEmail}", currentBuild.currentResult)
            }
        }

        success{
            script{
                println("流水线成功后,要做的事情")
            }

        }
        failure{
            script{
                println("流水线失败后,要做的事情")
            }
        }

        aborted{
            script{
                println("流水线取消后,要做的事情")
            }

        }
    }
}

junit展示图形

        stage("UnitTest"){
            steps{
                script{
                    sh "${buildTools["maven"]}/bin/mvn test"

                }
            }
            post {
                success {
                    script{
                        junit 'target/surefire-reports/*.xml'
                    }
                }
            }
        }

1.2 Gradle

项目生成

官网:https://gradle.org/releases/ Gradle基于Groovy,具有更灵活更强大的构建系统,能帮助我们构建更复杂的项目。

上传代码到gitlab仓库

[root@jeekins demo-grable]# git add .
[root@jeekins demo-grable]# git commit -m "add ."
[root@jeekins demo-grable]# git push -u origin master

配置环境

https://gradle.org/next-steps/

unzip gradle-6.8.3-bin.zip -d /usr/local/
export GRADLE_HOME=/usr/local/gradle-6.8.3/
export PATH=$GRADLE_HOME/bin:$PATH
source /etc/profile
gradle -v

常用命令

  • gradle build 构建项目
  • gradle build -x test 构建项目跳过测试
  • gradle clean 清空构建目录

配置阿里gradle源 、 本地仓库;

在项目文件里的 build.gradle 文件中加入以下代码:

allprojects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    mavenLocal()
    mavenCentral()
  }
}

添加在这里

repositories {
        mavenCentral()
        maven {
          url 'https://maven.aliyun.com/repository/public/'
        }
}

Jenkins集成

//gitlab传递的数据{}
println("${webhookdata}")

def buildTools = ["gradle": "/data/gradle-7.2"]


//数据格式化
webhookdata = readJSON text: "${webhookdata}"

//提取仓库信息
env.srcUrl= webhookdata["project"]["git_http_url"]   //项目地址
env.branchName= webhookdata["ref"]-"refs/heads/"      // 分支
env.commitId= webhookdata["checkout_sha"]            //提交id
env.commitUser= webhookdata["user_username"]         // 提交人
env.userEmail = webhookdata["user_email"]            //邮箱

currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} "
currentBuild.displayName = "${env.commitId}"

pipeline{
    //指定运行此流水线的节点,指定标签的名字
    agent { node { label "build"}}
    stages{
        //阶段1 获取代码
        stage("CheckOut"){
            //定义阶段1的变量
            environment {
                NAME = "hwf01"
                VERSION = "1.1.11"
                ENVTYPE = "DEV1"
            }
            steps{
                script{
                    //branchName = "${params.branchName}"
                    //srcUrl = "${params.srcUrl}"
                    checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]],
                              extensions: [],
                              userRemoteConfigs: [[credentialsId: 'gitlab-root',
                                                   url: "${env.srcUrl}"]]])
                }
            }
        }
        stage("Build") {
            steps {
                script {
                    println("运行构建")
                    //要是想获取input的值,打印他的环境变量
                    sh "${buildTools["gradle"]}/bin/gradle clean && ${buildTools["gradle"]}/bin/gradle build -x test"
                }
            }
        }
        stage("Test"){
            steps{
                script {
                    println("运行测试")
                    sh "${buildTools["gradle"]}/bin/gradle test"
                    junit 'build/test-results/test/*.xml'
                }
            }
        }

    }
    post {
        always{
            script{
                println("流水线结束后,经常做的事情")
                //EmailUser("${env.userEmail}", currentBuild.currentResult)
            }
        }

        success{
            script{
                println("流水线成功后,要做的事情")
            }

        }
        failure{
            script{
                println("流水线失败后,要做的事情")
            }
        }

        aborted{
            script{
                println("流水线取消后,要做的事情")
            }

        }
    }
}

 

2. Go项目构建工具

go:下载地址https://studygolang.com/dl

配置环境

# tar zxf go1.16.3.linux-amd64.tar.gz -C /usr/local/
# cd /usr/local/go/
# ls
AUTHORS          CONTRIBUTORS  PATENTS    SECURITY.md  api  doc          lib   pkg         src
CONTRIBUTING.md  LICENSE       README.md  VERSION      bin  favicon.ico  misc  robots.txt  test
# pwd
/usr/local/go
[root@zeyang-nuc-service go]# vi /etc/profile

export GOROOT=/usr/local/go
export GOPATH=/opt/godir
export PATH=$GOROOT/bin:$PATH
yum -y install --downloadonly --downloaddir=./ glibc.i686
# source /etc/profile
# go version
go version go1.16.3 linux/amd64
  • GOROOT设置golang的安装位置
  • GOBIN目录是执行 go install 后生成可执行文件的目录
  • GOPATH 工作目录

常用命令

  • go clean 清空构建
  • go build 构建源文件
  • go doc 生成godoc文档
  • go install 编译并安装指定的代码包
  • go fmt 代码格式化
  • go get 获取一个包
  • go run 运行一个go文件
  • go test 运行测试

go要自己写

3.1 npm

配置环境

wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz
tar xf node-v14.16.1-linux-x64.tar.xz -C /usr/local/

# vi /etc/profile
export NODE_HOME=/usr/local/node-v14.16.1-linux-x64
export PATH=$NODE_HOME/bin:$PATH

source /etc/profile
# node -v
v14.16.1
# npm -v
6.14.12

项目生成

通过下面的命令,初始化一个vue项目

# npm install -g vue-cli
+ vue@2.6.12
added 1 package from 1 contributor in 3.342s
# vue-init  webpack vuedemo

? Project name vuedemo
? Project description A Vue.js project
? Author adminuser <2560350642@qq.com>
? Vue build standalone
? Install vue-router? No
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm

   vue-cli · Generated "vuedemo".

常用命令

  • npm install <moduleName> -g 包安装到全局
  • npm list:查看当前已安装的包。

 

//gitlab传递的数据{}
println("${webhookdata}")

def buildTools = ["npm": "/data/node-v14.18.0-linux-x64" ]


//数据格式化
webhookdata = readJSON text: "${webhookdata}"

//提取仓库信息
env.srcUrl= webhookdata["project"]["git_http_url"]   //项目地址
env.branchName= webhookdata["ref"]-"refs/heads/"      // 分支
env.commitId= webhookdata["checkout_sha"]            //提交id
env.commitUser= webhookdata["user_username"]         // 提交人
env.userEmail = webhookdata["user_email"]            //邮箱

currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} "
currentBuild.displayName = "${env.commitId}"

pipeline{
    //指定运行此流水线的节点,指定标签的名字
    agent { node { label "build"}}
    stages{
        //阶段1 获取代码
        stage("CheckOut"){
            //定义阶段1的变量
            environment {
                NAME = "hwf01"
                VERSION = "1.1.11"
                ENVTYPE = "DEV1"
            }
            steps{
                script{
                    //branchName = "${params.branchName}"
                    //srcUrl = "${params.srcUrl}"
                    checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]],
                              extensions: [],
                              userRemoteConfigs: [[credentialsId: 'gitlab-root',
                                                   url: "${env.srcUrl}"]]])
                }
            }
        }
        stage("Build") {
            steps {
                script {
                    println("运行构建")
                    //要是想获取input的值,打印他的环境变量
                    sh """
                    export PATH=\$PATH:${buildTools["npm"]}/bin
                    ${buildTools["npm"]}/bin/npm install
                    ${buildTools["npm"]}/bin/npm run build
                    """
                }
            }
        }
        stage("Test"){
            steps{
                script {
                    println("运行测试")
                    //sh "${buildTools["go"]}/bin/go test"
                    //junit 'build/test-results/test/*.xml'
                }
            }
        }

    }
    post {
        always{
            script{
                println("流水线结束后,经常做的事情")
                //EmailUser("${env.userEmail}", currentBuild.currentResult)
            }
        }

        success{
            script{
                println("流水线成功后,要做的事情")
            }

        }
        failure{
            script{
                println("流水线失败后,要做的事情")
            }
        }

        aborted{
            script{
                println("流水线取消后,要做的事情")
            }

        }
    }
}



3.2 yarn

yarn,facebook取代npm的包管理工具,速度快。Yarn 缓存包,无需重复下载。 并行下载,安装速度快。

配置环境

npm install -g yarn
yarn info

常用命令

  • yarn / yarn install
  • yarn clean
  • yarn config set cache-folder "/opt/yarncache"
yarn config set registry https://registry.npm.taobao.org
yarn config set sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年10月11日15:51:09
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
jenkins-邮件通知|gitlab配置邮箱 Jenkins

jenkins-邮件通知|gitlab配置邮箱

jenkins-邮件通知|gitlab配置邮箱 gitlab-配置邮箱地址 默认情况可能每个Gitlab用户没有配置邮箱的, 需要Gitlab用户要配置好邮箱。 点击头像进入 edit profile...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: