add jenkinsfile

master
sre 3 years ago
parent 6afa145694
commit e3eea60c75

40
Jenkinsfile vendored

@ -0,0 +1,40 @@
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
//该sh步骤调用该make命令只有在命令返回零退出代码时才会继续。任何非零退出代码将失败Pipeline。
//archiveArtifacts捕获与include pattern**/target/*.jar匹配的文件并将它们保存到Jenkins主文件以供以后检索。
//存档工件不能替代使用诸如Artifactory或Nexus之类的外部工件存储库只能用于基本报告和文件归档。
}
}
stage('Test') {
steps {
/* `make check` returns non-zero on test failures,
* using `true` to allow the Pipeline to continue nonetheless
*/
sh 'make check || true'
junit '**/target/*.xml'
//运行自动化测试是任何成功的连续传送过程的重要组成部分。因此Jenkins有许多插件提供的测试记录报告和可视化设备 。在基本层面上当有测试失败时让Jenkins在Web UI中记录报告和可视化的故障是有用的。
//下面的示例使用junit由JUnit插件提供的步骤。
//在下面的示例中如果测试失败则Pipeline被标记为“不稳定”如Web UI中的黄色球。根据记录的测试报告Jenkins还可以提供历史趋势分析和可视化。
}
}
stage('Deploy') {
when {
expression {
currentBuild.result == null || currentBuild.result == 'SUCCESS'
//访问该currentBuild.result变量允许Pipeline确定是否有任何测试失败。在这种情况下值将是 UNSTABLE。
}
}
steps {
sh 'make publish'
}
}
//部署可能意味着各种步骤具体取决于项目或组织的要求并且可能是从构建的工件发送到Artifactory服务器将代码推送到生产系统的任何步骤。
//在Pipeline示例的这个阶段“构建”和“测试”阶段都已成功执行。实际上“部署”阶段只能在上一阶段成功完成否则Pipeline将早退。
}
}

@ -0,0 +1,77 @@
package testT
import (
"flag"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
log "github.com/sirupsen/logrus"
"net/http"
"sreExporter/collector"
"strings"
)
var (
metricsPath string = "https://github.com/strive-after/demo-exporter"
version string = "v1.0"
listenAddress string
help bool
disable string //命令行传入的需要关闭的指标
disables []string //处理命令行传入的根据,分割为一个切片做处理
)
func init() {
flag.StringVar(&listenAddress, "addr", ":9100", "addr")
flag.BoolVar(&help, "h", false, "help")
flag.StringVar(&disable, "disable", "", "关闭的指标收集器")
}
// main函数作为总入口 提供web url /metrices以及访问/的时候提供一些基本介绍
func main() {
flag.Parse()
if help {
flag.Usage()
return
}
disables = strings.Split(disable, ",")
//手动开关
//通过用户输入的我们做关闭
for scraper, _ := range collector.Scrapers {
for _, v := range disables {
if v == scraper.Name() {
collector.Scrapers[scraper] = false
break
}
}
}
//访问/的时候返回一些基础提示
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<html>
<head><title>` + collector.Name() + `</title></head>
<body>
<h1><a style="text-decoration:none" href=''>` + collector.Name() + `</a></h1>
<p><a href='` + metricsPath + `'>Metrics</a></p>
<h2>Build</h2>
<pre>` + version + `</pre>
</body>
</html>`))
})
//根据开关来判断指标的是否需要收集 这里只有代码里面的判断 用户手动开关还未做
enabledScrapers := []collector.Scraper{}
for scraper, enabled := range collector.Scrapers {
if enabled {
log.Info("Scraper enabled ", scraper.Name())
enabledScrapers = append(enabledScrapers, scraper)
}
}
//注册自身采集器
exporter := collector.New(collector.NewMetrics(), enabledScrapers)
prometheus.MustRegister(exporter)
http.Handle("/metrics", promhttp.Handler())
//监听端口
if err := http.ListenAndServe(listenAddress, nil); err != nil {
log.Printf("Error occur when start server %v", err)
}
}
Loading…
Cancel
Save