Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FSTORE-1702] Add base file for jenkins #491

Merged
merged 112 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from 111 commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
7f4b9e5
Add base file for jenkins
vatj Feb 26, 2025
4ea3275
Trigger again
vatj Feb 27, 2025
36c647e
Try to fix the ci.Jenkinsfile
vatj Feb 27, 2025
a9d4861
Test with agent
vatj Feb 27, 2025
2d1d7fd
Blabla
vatj Feb 27, 2025
2c30da3
Triiger
vatj Feb 27, 2025
798a5a0
Fix the pipeline
vatj Feb 27, 2025
a2d7b1a
apply some review
vatj Feb 27, 2025
952a613
Trust
vatj Feb 27, 2025
c4586c6
Trigger
vatj Feb 27, 2025
6fa24b3
Use yq
vatj Feb 27, 2025
205ae2c
Trigger
vatj Feb 27, 2025
15afcd0
Use filename extension
vatj Feb 27, 2025
a72b57f
Fix inputs
vatj Feb 27, 2025
0df069e
Maybe numbers are strings
vatj Feb 27, 2025
06f4fe9
Change the host
vatj Feb 27, 2025
5d7a2f4
Change the host
vatj Feb 27, 2025
a3f27f8
Automatic branch
vatj Feb 27, 2025
f2cbabb
Try to check if there are some cool env variables in jenkins
vatj Feb 27, 2025
6972db0
Weird
vatj Feb 27, 2025
4eed89d
Crazy
vatj Feb 27, 2025
2f0ffbd
Fix typo
vatj Feb 27, 2025
7101822
Improve the jenkins ci
vatj Feb 27, 2025
7e79f69
Merge branch 'main' into jenkins-ci
vatj Feb 27, 2025
5b75a36
Fix inputs
vatj Feb 27, 2025
d77b08c
Trigger ci
vatj Feb 27, 2025
8fbef20
Trigger
vatj Feb 27, 2025
b8fb0b5
try again
vatj Feb 27, 2025
5f948c1
Fix inputs.json
vatj Feb 27, 2025
61c25fb
Try the better way
vatj Feb 27, 2025
7f8b883
Minor changes'
vatj Feb 27, 2025
5ae4359
Wrap in step
vatj Feb 27, 2025
95dfb96
Try to debug the pipeline
vatj Feb 28, 2025
d9e284f
Remove ci jenkinsfile
vatj Feb 28, 2025
81264e3
Edit pipeline
vatj Feb 28, 2025
4b5ce54
Tests
vatj Feb 28, 2025
5b060b5
Trigger again
vatj Feb 28, 2025
0612195
Try the trigger
vatj Feb 28, 2025
a3fde6f
Missing bracket
vatj Feb 28, 2025
32f4fa3
Remove steps from post condition
vatj Feb 28, 2025
f3ee4af
Named argument
vatj Feb 28, 2025
293045e
Remove the post condition to highlight the failure
vatj Feb 28, 2025
72a0ab0
Fix sh command
vatj Feb 28, 2025
abe248a
Fixed the wrong one
vatj Feb 28, 2025
4696129
More is more
vatj Feb 28, 2025
2a17623
Printenv
vatj Feb 28, 2025
9b7f5f0
Don't run post always
vatj Feb 28, 2025
48599d1
Remove post
vatj Feb 28, 2025
5e91abe
Forgot to comment one step
vatj Feb 28, 2025
fd99646
Remove wrong quote
vatj Feb 28, 2025
a12c400
Redirect towards correct backend
vatj Feb 28, 2025
09e3cb1
Move to script and .github directory
vatj Feb 28, 2025
78ebc13
Remove extra bracket
vatj Feb 28, 2025
1c07a18
Consistent naming
vatj Feb 28, 2025
6a58f49
Move cleanup
vatj Feb 28, 2025
d937e42
Try more declarative
vatj Feb 28, 2025
31b6412
Try more declarative
vatj Feb 28, 2025
c74ab13
Fix json parsing
vatj Feb 28, 2025
60a51e0
Try again
vatj Feb 28, 2025
3a2c474
Wrong sha
vatj Feb 28, 2025
06010ba
Make it work
vatj Feb 28, 2025
5b38062
Var naming
vatj Feb 28, 2025
c009d6c
Remove cleanup and declarative download
vatj Feb 28, 2025
d948828
Post is weird
vatj Feb 28, 2025
c0fc340
Query parameters test
vatj Feb 28, 2025
366d57a
Remove a quote
vatj Feb 28, 2025
30615ad
Add -G to apply query params
vatj Feb 28, 2025
371c7f8
Query between times
vatj Feb 28, 2025
335135f
Remove sha stuff
vatj Feb 28, 2025
08e3d06
Sorted
vatj Feb 28, 2025
182c476
Test
vatj Feb 28, 2025
438151e
Test
vatj Mar 2, 2025
45794cc
Update CI
vatj Mar 2, 2025
84660f6
Missing tick
vatj Mar 2, 2025
3b31f7e
Why?
vatj Mar 2, 2025
89c16f7
Test
vatj Mar 2, 2025
ad96dd5
Printenv
vatj Mar 3, 2025
921eab6
Check the loadtest PRs
vatj Mar 3, 2025
94b3715
Test again
vatj Mar 3, 2025
2a5228e
Sleep 5
vatj Mar 3, 2025
4e3ba57
Merge branch 'main' into jenkins-ci
vatj Mar 4, 2025
2209dc3
Add workflow run_id when looking for a match
vatj Mar 4, 2025
94305a4
Test the loadtest PR
vatj Mar 4, 2025
57d60a6
Try the workflow updated
vatj Mar 4, 2025
1d99c90
Try and try
vatj Mar 4, 2025
6e6251e
Minor cleanups
vatj Mar 4, 2025
8d18f7e
Remove head sha
vatj Mar 4, 2025
70d7ccf
cleanup inputs
vatj Mar 5, 2025
a0c3bc3
Leave the PR on loadtest alone for now
vatj Mar 5, 2025
bfd3da6
Fix inputs
vatj Mar 5, 2025
fbbb8ea
Use staging ip
vatj Mar 5, 2025
221a6ce
Try triggering workflow from different branch
vatj Mar 5, 2025
381c616
Fix labels inputs
vatj Mar 5, 2025
678210a
Add junit parsing
vatj Mar 5, 2025
60e00fb
Maybe 10s is a bit lwo
vatj Mar 5, 2025
4daa86b
Remove extra
vatj Mar 5, 2025
475c43d
Remove results.xml system
vatj Mar 5, 2025
e5de58d
Add loadtest PR back
vatj Mar 5, 2025
afe9aa0
Trigger
vatj Mar 5, 2025
3c691cc
Merge branch 'main' into jenkins-ci
vatj Mar 5, 2025
04501ba
Set automatically same PR
vatj Mar 5, 2025
3b01ca4
Target correct endpoint
vatj Mar 5, 2025
007535c
Concatenate labels if exist
vatj Mar 5, 2025
dd87356
Try again for labels
vatj Mar 5, 2025
cad19fc
Test the labels
vatj Mar 5, 2025
bddad35
Fix
vatj Mar 5, 2025
cba1e05
trigger again
vatj Mar 6, 2025
ee6d84c
Trigger again
vatj Mar 6, 2025
677df3b
Trigger happy
vatj Mar 6, 2025
73372c3
Trigger one more time
vatj Mar 6, 2025
4f1d10d
Merge branch 'main' into jenkins-ci
vatj Mar 6, 2025
dac5e38
Move ci file + target correct ref branch + fix ref to main
vatj Mar 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflow_inputs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/bin/bash
set -e

SHORT_SHA=$1
echo "" > inputs.yaml


if [[ ${ghprbPullTitle} =~ (FSTORE-[0-9]+) || ${ghprbPullTitle} =~ (HWORKS-[0-9]+) ]]; then
captured_string=${BASH_REMATCH[1]}
echo "Found JIRA ticket: ${captured_string}, checking for corresponding pr in loadtest repo"
loadtest_prs=$(curl -L -G \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-d "state=open" \
https://api.github.com/repos/logicalclocks/loadtest/pulls)

loadtest_branch=$(echo "${loadtest_prs}" | jq -r --arg captured_string ${captured_string} '.[] | select(.title | contains($captured_string)) | .head.ref')
minikube_ip=$(echo "${loadtest_prs}" | jq -r --arg captured_string ${captured_string} '.[] | select(.title | contains($captured_string)) | .labels[] | select(.name | contains("10.87.")) | .name')
labels=$(echo "${loadtest_prs}" | jq -r --arg captured_string ${captured_string} '.[] | select(.title | contains($captured_string)) | .labels[] | select(.name | contains("e2e")) | .name' | paste -sd ",")
fi

if [ -z "${loadtest_branch}" ]; then
echo "No corresponding pr found in loadtest repo, using main branch"
loadtest_branch="main"
else
echo "Found loadtest branch: ${loadtest_branch}"
fi

if [ -z "${minikube_ip}" ]; then
echo "No minikube ip found in labels, using default staging cluster"
minikube_ip"10.87.41.126" # Make it domain name instead of ip
else
echo "Found minikube ip in loadtest PR labels: ${minikube_ip}"
fi

if [ -z "${labels}" ]; then
echo "No labels found, using default e2e_small"
labels="e2e_small"
else
echo "Found labels: ${labels}"
fi

# .ref is the name of the branch where the workflow dispatch will be sent.
yq '.ref = "jenkins-ci"' -i inputs.yaml

yq '.inputs.max_parallel = "8"' -i inputs.yaml
hopsworks_domain=$minikube_ip yq '.inputs.hopsworks_domain = strenv(hopsworks_domain)' -i inputs.yaml
labels=$labels yq '.inputs.labels = strenv(labels)' -i inputs.yaml
hopsworks_api_branch=${ghprbSourceBranch} yq '.inputs.hopsworks_api_branch = strenv(hopsworks_api_branch)' -i inputs.yaml
loadtest_branch=${loadtest_branch} yq '.inputs.loadtest_head_ref = strenv(loadtest_branch)' -i inputs.yaml
short_sha=$SHORT_SHA yq '.inputs.short_sha = strenv(short_sha)' -i inputs.yaml
user_repo_api=${ghprbPullAuthorLogin} yq '.inputs.user_repo_api = strenv(user_repo_api)' -i inputs.yaml

yq -o=json inputs.yaml > inputs.json
cat inputs.json
102 changes: 102 additions & 0 deletions ci.Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
def WORKFLOW_RUN_ID = "0"
def SHORT_SHA = ""
def REF_LOADTEST_BRANCH = ""
def WORKFLOW_RUN_URL = ""

pipeline {
agent {
label "local"
}
environment {
GITHUB_TOKEN = credentials('990f5312-cd08-48ec-baf8-3b27ff551204')
}
stages {
stage('Clone repository') {
steps {
checkout scm
}
}
stage('Input parameters') {
steps {
script {
SHORT_SHA = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
echo "Short sha: ${SHORT_SHA}"
sh "bash .github/workflow_inputs.sh ${SHORT_SHA}"
REF_LOADTEST_BRANCH = sh(script: "cat inputs.json | jq -r '.ref'", returnStdout: true).trim()
echo "Ref loadtest branch: ${REF_LOADTEST_BRANCH}"
}
}
}
stage('Post webhook') {
steps {
script {
def dispatch_response = sh(script: """curl -L -X POST -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-d @inputs.json \
https://api.github.com/repos/logicalclocks/loadtest/actions/workflows/e2e_small.yaml/dispatches""",
returnStdout: true
).trim()
echo "Dispatch response: ${dispatch_response}"
sh "rm inputs.json"
}
}
}
stage ('Find workflow run id') {
steps {
script {
sleep 5
TIME_AFTER_WORKFLOW_DISPATCH = sh(script: "date -u +%Y-%m-%dT%H:%M:%SZ", returnStdout: true).trim()
WORKFLOW_RUN_ID = sh(script: """curl -L -X GET -G -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-d "event=workflow_dispatch" -d "actor=HopsworksJenkins" -d "branch=${REF_LOADTEST_BRANCH}" \
https://api.github.com/repos/logicalclocks/loadtest/actions/runs | jq -r '.workflow_runs[0].id'""", returnStdout: true).trim()
echo "Workflow run id: ${WORKFLOW_RUN_ID}"
}
}
}
stage('Wait for github action workflow to complete') {
steps {
script {
def status = "in_progress"
while (status == "in_progress" || status == "queued") {
sleep 60
status = sh(script: """curl -L -X GET -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/logicalclocks/loadtest/actions/runs/${WORKFLOW_RUN_ID} | jq -r '.status' """, returnStdout: true).trim()
echo "Status: ${status}"
}
}
}
}
stage('Download artifacts') {
steps {
script {
def REPORT_URL = sh(
script: """curl -L -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/logicalclocks/loadtest/actions/runs/${WORKFLOW_RUN_ID}/artifacts \
| jq -r '.artifacts[] | select(.name == "results_${WORKFLOW_RUN_ID}.xml") | .archive_download_url' """,
returnStdout: true
).trim()
echo "Report url: ${REPORT_URL}"
sh(
script: """curl -L -H \"Accept: application/vnd.github+json\" \
-H \"Authorization: Bearer ${GITHUB_TOKEN}\" \
-H \"X-GitHub-Api-Version: 2022-11-28\" \
-o results.zip "${REPORT_URL}" """
)
sh """if [ -f results.xml ]; then rm results.xml; fi && unzip results.zip && rm results.zip"""
}
}
}
}
post {
always {
junit 'results.xml'
}
}
}
Loading