Skip to content

Commit 53769c4

Browse files
PMM-7: 3.4.0 GSSAPI Nightly (#3499)
* PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly * PMM-7: GSSAPI Nightly
1 parent 6449a38 commit 53769c4

File tree

2 files changed

+332
-2
lines changed

2 files changed

+332
-2
lines changed
Lines changed: 330 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,330 @@
1+
library changelog: false, identifier: 'lib@master', retriever: modernSCM([
2+
$class: 'GitSCMSource',
3+
remote: 'https://github.com/Percona-Lab/jenkins-pipelines.git'
4+
]) _
5+
6+
void runStagingServer(String DOCKER_VERSION, CLIENT_VERSION, CLIENTS, CLIENT_INSTANCE, SERVER_IP, PMM_QA_GIT_BRANCH, ADMIN_PASSWORD = "admin") {
7+
stagingJob = build job: 'pmm3-aws-staging-start', parameters: [
8+
string(name: 'DOCKER_VERSION', value: DOCKER_VERSION),
9+
string(name: 'CLIENT_VERSION', value: CLIENT_VERSION),
10+
string(name: 'CLIENTS', value: CLIENTS),
11+
string(name: 'CLIENT_INSTANCE', value: CLIENT_INSTANCE),
12+
string(name: 'DOCKER_ENV_VARIABLE', value: '-e PMM_DEBUG=1 -e PMM_DATA_RETENTION=48h -e PMM_DEV_PORTAL_URL=https://portal-dev.percona.com -e PMM_DEV_PERCONA_PLATFORM_ADDRESS=https://check-dev.percona.com:443 -e PMM_DEV_PERCONA_PLATFORM_PUBLIC_KEY=RWTkF7Snv08FCboTne4djQfN5qbrLfAjb8SY3/wwEP+X5nUrkxCEvUDJ'),
13+
string(name: 'SERVER_IP', value: SERVER_IP),
14+
string(name: 'NOTIFY', value: 'false'),
15+
string(name: 'DAYS', value: '1'),
16+
string(name: 'PMM_QA_GIT_BRANCH', value: PMM_QA_GIT_BRANCH),
17+
string(name: 'ADMIN_PASSWORD', value: ADMIN_PASSWORD)
18+
]
19+
env.VM_IP = stagingJob.buildVariables.IP
20+
env.VM_NAME = stagingJob.buildVariables.VM_NAME
21+
def clientInstance = "yes";
22+
if ( CLIENT_INSTANCE == clientInstance ) {
23+
env.PMM_URL = "https://admin:${ADMIN_PASSWORD}@${SERVER_IP}"
24+
env.PMM_UI_URL = "http://${SERVER_IP}/"
25+
}
26+
else
27+
{
28+
env.PMM_URL = "https://admin:${ADMIN_PASSWORD}@${VM_IP}"
29+
env.PMM_UI_URL = "http://${VM_IP}/"
30+
}
31+
}
32+
33+
void runStagingClient(String DOCKER_VERSION, CLIENT_VERSION, CLIENTS, CLIENT_INSTANCE, SERVER_IP, NODE_TYPE, ENABLE_PULL_MODE, PSMDB_VERSION, MODB_VERSION , QA_INTEGRATION_GIT_BRANCH, ADMIN_PASSWORD = "admin") {
34+
stagingJob = build job: 'pmm3-aws-staging-start', parameters: [
35+
string(name: 'DOCKER_VERSION', value: DOCKER_VERSION),
36+
string(name: 'CLIENT_VERSION', value: CLIENT_VERSION),
37+
string(name: 'CLIENTS', value: CLIENTS),
38+
string(name: 'CLIENT_INSTANCE', value: CLIENT_INSTANCE),
39+
string(name: 'SERVER_IP', value: SERVER_IP),
40+
string(name: 'ENABLE_PULL_MODE', value: ENABLE_PULL_MODE),
41+
string(name: 'NOTIFY', value: 'false'),
42+
string(name: 'DAYS', value: '1'),
43+
string(name: 'PSMDB_VERSION', value: PSMDB_VERSION),
44+
string(name: 'MODB_VERSION', value: MODB_VERSION),
45+
string(name: 'PMM_QA_GIT_BRANCH', value: QA_INTEGRATION_GIT_BRANCH),
46+
string(name: 'ADMIN_PASSWORD', value: ADMIN_PASSWORD)
47+
]
48+
if ( NODE_TYPE == 'mongo-node' ) {
49+
env.VM_CLIENT_IP_MYSQL = stagingJob.buildVariables.IP
50+
env.VM_CLIENT_NAME_MYSQL = stagingJob.buildVariables.VM_NAME
51+
} else if ( NODE_TYPE == 'sharded-psmdb' ) {
52+
env.VM_CLIENT_IP_PSMDB_SHARDED = stagingJob.buildVariables.IP
53+
env.VM_CLIENT_NAME_PSMDB_SHARDED = stagingJob.buildVariables.VM_NAME
54+
} else {
55+
env.VM_CLIENT_IP_MONGO = stagingJob.buildVariables.IP
56+
env.VM_CLIENT_NAME_MONGO = stagingJob.buildVariables.VM_NAME
57+
}
58+
}
59+
60+
void destroyStaging(IP) {
61+
build job: 'aws-staging-stop', parameters: [
62+
string(name: 'VM', value: IP),
63+
]
64+
}
65+
66+
void checkClientNodesAgentStatus(String VM_CLIENT_IP, PMM_QA_GIT_BRANCH) {
67+
withCredentials([sshUserPrivateKey(credentialsId: 'aws-jenkins', keyFileVariable: 'KEY_PATH', passphraseVariable: '', usernameVariable: 'USER')]) {
68+
sh """
69+
ssh -i "${KEY_PATH}" -o ConnectTimeout=1 -o StrictHostKeyChecking=no ${USER}@${VM_CLIENT_IP} '
70+
set -o errexit
71+
set -o xtrace
72+
echo "Checking Agent Status on Client Nodes";
73+
sudo mkdir -p /srv/pmm-qa || :
74+
sudo git clone --single-branch --branch $PMM_QA_GIT_BRANCH https://github.com/percona/pmm-qa.git /srv/pmm-qa
75+
sudo chmod -R 755 /srv/pmm-qa
76+
sudo chmod 755 /srv/pmm-qa/support_scripts/agent_status.py
77+
python3 /srv/pmm-qa/support_scripts/agent_status.py
78+
'
79+
"""
80+
}
81+
}
82+
83+
pipeline {
84+
agent {
85+
label 'min-noble-x64'
86+
}
87+
environment {
88+
REMOTE_AWS_MYSQL_USER=credentials('pmm-dev-mysql-remote-user')
89+
REMOTE_AWS_MYSQL_PASSWORD=credentials('pmm-dev-remote-password')
90+
REMOTE_AWS_MYSQL57_HOST=credentials('pmm-dev-mysql57-remote-host')
91+
OKTA_TOKEN=credentials('OKTA_TOKEN')
92+
PORTAL_BASE_URL=credentials('PORTAL_BASE_URL')
93+
REMOTE_MYSQL_HOST=credentials('mysql-remote-host')
94+
REMOTE_MYSQL_USER=credentials('mysql-remote-user')
95+
REMOTE_MYSQL_PASSWORD=credentials('mysql-remote-password')
96+
REMOTE_MONGODB_HOST=credentials('qa-remote-mongodb-host')
97+
REMOTE_MONGODB_USER=credentials('qa-remote-mongodb-user')
98+
REMOTE_MONGODB_PASSWORD=credentials('qa-remote-mongodb-password')
99+
REMOTE_POSTGRESQL_HOST=credentials('qa-remote-pgsql-host')
100+
REMOTE_POSTGRESQL_USER=credentials('qa-remote-pgsql-user')
101+
REMOTE_POSTGRESSQL_PASSWORD=credentials('qa-remote-pgsql-password')
102+
REMOTE_PROXYSQL_HOST=credentials('qa-remote-proxysql-host')
103+
REMOTE_PROXYSQL_USER=credentials('qa-remote-proxysql-user')
104+
REMOTE_PROXYSQL_PASSWORD=credentials('qa-remote-proxysql-password')
105+
INFLUXDB_ADMIN_USER=credentials('influxdb-admin-user')
106+
INFLUXDB_ADMIN_PASSWORD=credentials('influxdb-admin-password')
107+
INFLUXDB_USER=credentials('influxdb-user')
108+
INFLUXDB_USER_PASSWORD=credentials('influxdb-user-password')
109+
MONITORING_HOST=credentials('monitoring-host')
110+
MAILOSAUR_API_KEY=credentials('MAILOSAUR_API_KEY')
111+
MAILOSAUR_SERVER_ID=credentials('MAILOSAUR_SERVER_ID')
112+
MAILOSAUR_SMTP_PASSWORD=credentials('MAILOSAUR_SMTP_PASSWORD')
113+
GCP_MYSQL57_HOST=credentials('GCP_MYSQL57_HOST');
114+
GCP_MYSQL57_USER=credentials('GCP_MYSQL57_USER');
115+
GCP_MYSQL57_PASSWORD=credentials('GCP_MYSQL57_PASSWORD');
116+
GCP_MYSQL80_HOST=credentials('GCP_MYSQL80_HOST');
117+
GCP_MYSQL80_USER=credentials('GCP_MYSQL80_USER');
118+
GCP_MYSQL80_PASSWORD=credentials('GCP_MYSQL80_PASSWORD');
119+
GCP_PGSQL13_HOST=credentials('GCP_PGSQL13_HOST');
120+
GCP_PGSQL13_USER=credentials('GCP_PGSQL13_USER');
121+
GCP_PGSQL13_PASSWORD=credentials('GCP_PGSQL13_PASSWORD');
122+
GCP_PGSQL12_HOST=credentials('GCP_PGSQL12_HOST');
123+
GCP_PGSQL12_USER=credentials('GCP_PGSQL12_USER');
124+
GCP_PGSQL12_PASSWORD=credentials('GCP_PGSQL12_PASSWORD');
125+
GCP_PGSQL14_HOST=credentials('GCP_PGSQL14_HOST');
126+
GCP_PGSQL14_USER=credentials('GCP_PGSQL14_USER');
127+
GCP_PGSQL14_PASSWORD=credentials('GCP_PGSQL14_PASSWORD');
128+
GCP_PGSQL11_HOST=credentials('GCP_PGSQL11_HOST');
129+
GCP_PGSQL11_USER=credentials('GCP_PGSQL11_USER');
130+
GCP_PGSQL11_PASSWORD=credentials('GCP_PGSQL11_PASSWORD');
131+
ZEPHYR_PMM_API_KEY=credentials('ZEPHYR_PMM_API_KEY');
132+
}
133+
parameters {
134+
string(
135+
defaultValue: 'v3',
136+
description: 'Tag/Branch for pmm-ui-tests repository',
137+
name: 'GIT_BRANCH')
138+
choice(
139+
choices: ['docker', 'ovf', 'ami'],
140+
description: "PMM Server installation type.",
141+
name: 'SERVER_TYPE')
142+
string(
143+
defaultValue: 'perconalab/pmm-server:3-dev-latest',
144+
description: 'PMM Server docker container version (image-name:version-tag)',
145+
name: 'DOCKER_VERSION')
146+
string(
147+
defaultValue: 'https://s3.us-east-2.amazonaws.com/pmm-build-cache/PR-BUILDS/pmm-client/pmm-client-dynamic-ol9-latest.tar.gz',
148+
description: 'PMM Client version',
149+
name: 'CLIENT_VERSION')
150+
choice(
151+
choices: ['no', 'yes'],
152+
description: 'Enable Pull Mode, if you are using this instance as Client Node',
153+
name: 'ENABLE_PULL_MODE')
154+
string(
155+
defaultValue: 'pmm3admin!',
156+
description: 'pmm-server admin user default password',
157+
name: 'ADMIN_PASSWORD')
158+
string(
159+
defaultValue: 'v3',
160+
description: 'Tag/Branch for qa-integration repository',
161+
name: 'QA_INTEGRATION_GIT_BRANCH')
162+
string(
163+
defaultValue: 'v3',
164+
description: 'Tag/Branch for pmm-qa repository',
165+
name: 'PMM_QA_GIT_BRANCH')
166+
choice(
167+
choices: ['8.0', '7.0', '6.0', '5.0', '4.4'],
168+
description: "Percona Server for MongoDB version",
169+
name: 'PSMDB_VERSION')
170+
choice(
171+
choices: ['8.0', '7.0', '6.0', '5.0', '4.4'],
172+
description: "Official MongoDB version",
173+
name: 'MODB_VERSION')
174+
}
175+
options {
176+
skipDefaultCheckout()
177+
}
178+
triggers { cron('0 0 * * *') }
179+
stages {
180+
stage('Prepare') {
181+
steps {
182+
// clean up workspace and fetch pmm-ui-tests repository
183+
deleteDir()
184+
git poll: false, branch: GIT_BRANCH, url: 'https://github.com/percona/pmm-ui-tests.git'
185+
186+
slackSend botUser: true, channel: '#pmm-notifications', color: '#0000FF', message: "[${JOB_NAME}]: build started - ${BUILD_URL}"
187+
sh '''
188+
sudo mkdir -p /srv/qa-integration || :
189+
sudo git clone --single-branch --branch \${QA_INTEGRATION_GIT_BRANCH} https://github.com/Percona-Lab/qa-integration.git /srv/qa-integration
190+
sudo chmod -R 755 /srv/qa-integration
191+
192+
'''
193+
}
194+
}
195+
stage('Setup Docker Server Instance') {
196+
when {
197+
expression { env.SERVER_TYPE == "docker" }
198+
}
199+
steps {
200+
runStagingServer(DOCKER_VERSION, CLIENT_VERSION, '--help', 'no', '127.0.0.1', QA_INTEGRATION_GIT_BRANCH, ADMIN_PASSWORD)
201+
}
202+
}
203+
stage('Sanity check') {
204+
steps {
205+
sh '''
206+
timeout 100 bash -c 'while [[ ! "$(curl -i -s --insecure -w "%{http_code}" \${PMM_URL}/ping)" =~ "200" ]]; do sleep 5; echo "$(curl -i -s --insecure -w "%{http_code}" \${PMM_URL}/ping)"; done' || false
207+
'''
208+
}
209+
}
210+
stage('Setup PMM Clients') {
211+
parallel {
212+
stage('Mongo pss client') {
213+
steps {
214+
runStagingClient(DOCKER_VERSION, CLIENT_VERSION, '--database psmdb,SETUP_TYPE=pss,GSSAPI=true', 'yes', env.VM_IP, 'mongo-node', ENABLE_PULL_MODE, PSMDB_VERSION, MODB_VERSION, QA_INTEGRATION_GIT_BRANCH, ADMIN_PASSWORD)
215+
}
216+
}
217+
}
218+
}
219+
stage('Disable upgrade on nightly PMM instance') {
220+
steps {
221+
sh '''
222+
#!/bin/bash
223+
curl --location -i --insecure --request PUT \
224+
--user "admin:$ADMIN_PASSWORD" \
225+
"$PMM_UI_URL/v1/server/settings" \
226+
--header "Content-Type: application/json" \
227+
--data '{ "enable_updates": false }'
228+
'''
229+
}
230+
}
231+
stage('Setup Node') {
232+
steps {
233+
sh """
234+
curl -sL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh
235+
sudo bash nodesource_setup.sh
236+
sudo apt install nodejs
237+
sudo apt-get install -y gettext
238+
npm ci
239+
npx playwright install
240+
sudo npx playwright install-deps
241+
envsubst < env.list > env.generated.list
242+
"""
243+
}
244+
}
245+
stage('Sleep') {
246+
steps {
247+
sleep 300
248+
}
249+
}
250+
stage('Check agent status') {
251+
parallel {
252+
stage('Check Agent Status on ps single and mongo pss') {
253+
steps {
254+
checkClientNodesAgentStatus(env.VM_CLIENT_IP_MYSQL, env.PMM_QA_GIT_BRANCH)
255+
}
256+
}
257+
}
258+
}
259+
stage('Run UI Tests') {
260+
options {
261+
timeout(time: 150, unit: "MINUTES")
262+
}
263+
steps {
264+
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'PMM_AWS_DEV', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
265+
sh """
266+
sed -i 's+http://localhost/+${PMM_UI_URL}/+g' pr.codecept.js
267+
npx codeceptjs run --reporter mocha-multi -c pr.codecept.js --grep '@gssapi-nightly'
268+
"""
269+
}
270+
}
271+
}
272+
}
273+
post {
274+
always {
275+
// stop staging
276+
sh '''
277+
curl --insecure ${PMM_URL}/logs.zip --output logs.zip || true
278+
'''
279+
script {
280+
if (currentBuild.result == null || currentBuild.result == 'SUCCESS') {
281+
junit 'tests/output/*.xml'
282+
slackSend botUser: true, channel: '#pmm-notifications', color: '#00FF00', message: "[${JOB_NAME}]: build finished - ${BUILD_URL}"
283+
archiveArtifacts artifacts: 'logs.zip'
284+
} else {
285+
junit 'tests/output/*.xml'
286+
slackSend botUser: true, channel: '#pmm-notifications', color: '#FF0000', message: "[${JOB_NAME}]: build ${currentBuild.result} - ${BUILD_URL}"
287+
archiveArtifacts artifacts: 'logs.zip'
288+
archiveArtifacts artifacts: 'tests/output/*.png'
289+
}
290+
}
291+
script {
292+
if (env.SERVER_TYPE == "ovf") {
293+
ovfStagingStopJob = build job: 'pmm-ovf-staging-stop', parameters: [
294+
string(name: 'VM', value: env.OVF_INSTANCE_NAME),
295+
]
296+
}
297+
if (env.SERVER_TYPE == "ami") {
298+
amiStagingStopJob = build job: 'pmm3-ami-staging-stop', parameters: [
299+
string(name: 'AMI_ID', value: env.AMI_INSTANCE_ID),
300+
]
301+
}
302+
if(env.VM_NAME && env.SERVER_TYPE == "docker")
303+
{
304+
destroyStaging(VM_NAME)
305+
}
306+
if(env.VM_CLIENT_NAME_MYSQL)
307+
{
308+
destroyStaging(VM_CLIENT_NAME_MYSQL)
309+
}
310+
if(env.VM_CLIENT_NAME_MONGO)
311+
{
312+
destroyStaging(VM_CLIENT_NAME_MONGO)
313+
}
314+
if(env.VM_CLIENT_NAME_PXC)
315+
{
316+
destroyStaging(VM_CLIENT_NAME_PXC)
317+
}
318+
if(env.VM_CLIENT_NAME_PGSQL)
319+
{
320+
destroyStaging(VM_CLIENT_NAME_PGSQL)
321+
}
322+
if(env.VM_CLIENT_NAME_PGSQL)
323+
{
324+
destroyStaging(VM_CLIENT_NAME_PS_GR)
325+
}
326+
}
327+
deleteDir()
328+
}
329+
}
330+
}

pmm/v3/pmm3-ui-tests-nightly.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ void checkClientNodesAgentStatus(String VM_CLIENT_IP, PMM_QA_GIT_BRANCH) {
128128
sudo mkdir -p /srv/pmm-qa || :
129129
sudo git clone --single-branch --branch $PMM_QA_GIT_BRANCH https://github.com/percona/pmm-qa.git /srv/pmm-qa
130130
sudo chmod -R 755 /srv/pmm-qa
131-
sudo chmod 755 /srv/pmm-qa/pmm-tests/agent_status.py
132-
python3 /srv/pmm-qa/pmm-tests/agent_status.py
131+
sudo chmod 755 /srv/pmm-qa/support_scripts/agent_status.py
132+
python3 /srv/pmm-qa/support_scripts/agent_status.py
133133
'
134134
"""
135135
}

0 commit comments

Comments
 (0)