forked from elastic/beats
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial work toward synthetic monitors (elastic#21436)
Initial, experimental version of synthetic monitor support for Heartbeat. This works in concert with https://github.com/elastic/synthetics , and is intended to only be run within the docker container built in the synthetics repo. This is guarded by the new ELASTIC_SYNTHETICS_CAPABLE env variable which must be set to true. As a note, this is easy to bypass because the main purpose is to make it clear that we do not support synthetics outside of the docker container for now. This includes a new directory, sample-synthetics-config in the x-pack directory that demonstrates using heartbeat with synthetics. Since we still only want people to run this in the docker image, we guard against accidental use outside of that by checking for the env var ELASTIC_SYNTHETICS_CAPABLE, which we only set in that image (yes, this is easy to circumvent, but we want users to realize they are circumventing something before they do so) (cherry picked from commit e50f673)
- Loading branch information
Showing
29 changed files
with
2,704 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
#!/usr/bin/env groovy | ||
|
||
@Library('apm@current') _ | ||
|
||
pipeline { | ||
agent { label 'ubuntu-18 && immutable' } | ||
environment { | ||
BASE_DIR = 'src/github.com/elastic/beats' | ||
DOCKERELASTIC_SECRET = 'secret/observability-team/ci/docker-registry/prod' | ||
DOCKER_REGISTRY = 'docker.elastic.co' | ||
SYNTHETICS = "-synthetics" | ||
PIPELINE_LOG_LEVEL = "INFO" | ||
BEATS_FOLDER = "x-pack/heartbeat" | ||
} | ||
options { | ||
timeout(time: 3, unit: 'HOURS') | ||
buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20', daysToKeepStr: '30')) | ||
timestamps() | ||
ansiColor('xterm') | ||
disableResume() | ||
durabilityHint('PERFORMANCE_OPTIMIZED') | ||
disableConcurrentBuilds() | ||
} | ||
triggers { | ||
issueCommentTrigger('(?i)^\\/packag[ing|e] synthetics$') | ||
} | ||
parameters { | ||
booleanParam(name: 'linux', defaultValue: true, description: 'Allow linux stages.') | ||
} | ||
stages { | ||
stage('Checkout') { | ||
options { skipDefaultCheckout() } | ||
steps { | ||
deleteDir() | ||
gitCheckout(basedir: "${BASE_DIR}") | ||
setEnvVar("GO_VERSION", readFile("${BASE_DIR}/.go-version").trim()) | ||
} | ||
} | ||
stage('Build and test'){ | ||
steps { | ||
withGithubNotify(context: "Build and test") { | ||
withBeatsEnv{ | ||
dir("${env.BEATS_FOLDER}") { | ||
sh(label: 'Build and test', script: 'mage build test') | ||
} | ||
} | ||
} | ||
} | ||
} | ||
stage('Package Linux'){ | ||
environment { | ||
HOME = "${env.WORKSPACE}" | ||
PLATFORMS = [ | ||
'+all', | ||
'linux/amd64' | ||
].join(' ') | ||
} | ||
steps { | ||
withGithubNotify(context: "Packaging Linux ${BEATS_FOLDER}") { | ||
release() | ||
pushCIDockerImages() | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
def pushCIDockerImages(){ | ||
catchError(buildResult: 'UNSTABLE', message: 'Unable to push Docker images', stageResult: 'FAILURE') { | ||
tagAndPush('heartbeat') | ||
} | ||
} | ||
|
||
def tagAndPush(name){ | ||
def libbetaVer = sh(label: 'Get libbeat version', script: 'grep defaultBeatVersion ${BASE_DIR}/libbeat/version/version.go|cut -d "=" -f 2|tr -d \\"', returnStdout: true)?.trim() | ||
|
||
def tagName = "${libbetaVer}" | ||
def oldName = "${DOCKER_REGISTRY}/beats/${name}:${libbetaVer}" | ||
def newName = "${DOCKER_REGISTRY}/observability-ci/${name}:${libbetaVer}${env.SYNTHETICS}" | ||
def commitName = "${DOCKER_REGISTRY}/observability-ci/${name}:${env.GIT_BASE_COMMIT}" | ||
dockerLogin(secret: "${DOCKERELASTIC_SECRET}", registry: "${DOCKER_REGISTRY}") | ||
retry(3){ | ||
sh(label:'Change tag and push', script: """ | ||
docker tag ${oldName} ${newName} | ||
docker push ${newName} | ||
docker tag ${oldName} ${commitName} | ||
docker push ${commitName} | ||
""") | ||
} | ||
} | ||
|
||
def release(){ | ||
withBeatsEnv(){ | ||
dir("${env.BEATS_FOLDER}") { | ||
sh(label: "Release ${env.BEATS_FOLDER} ${env.PLATFORMS}", script: 'mage package') | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* There is a specific folder structure in https://staging.elastic.co/ and https://artifacts.elastic.co/downloads/ | ||
* therefore the storage bucket in GCP should follow the same folder structure. | ||
* This is required by https://github.com/elastic/beats-tester | ||
* e.g. | ||
* baseDir=name -> return name | ||
* baseDir=name1/name2/name3-> return name2 | ||
*/ | ||
def getBeatsName(baseDir) { | ||
return baseDir.replace('x-pack/', '') | ||
} | ||
|
||
def withBeatsEnv(Closure body) { | ||
withMageEnv(){ | ||
withEnv([ | ||
"PYTHON_ENV=${WORKSPACE}/python-env" | ||
]) { | ||
dir("${env.BASE_DIR}"){ | ||
body() | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.