converts to declarative format

This commit is contained in:
Hyatt 2022-04-01 21:12:44 -05:00
parent a6096db9da
commit 169b391455
Signed by: nhyatt
GPG Key ID: C50D0BBB5BC40BEA

View File

@ -1,39 +1,87 @@
#!groovy
// repository configuration
def repository = "registry.c.test-chamber-13.lan"
def repositoryCreds = "harbor-repository-creds"
// jenkins secrets
def nordCreds = "nordvpn-login-creds"
def workspace
def dockerFile
def nordCreds
def kubeNamespace
def kubeSecret
def nordURL
def openVPNConfig
def k8sSecret
// kubernetes configuration
def kubeNamespace = "dl-automation"
def kubeSecret = "openvpn"
def label = "kubernetes-${UUID.randomUUID().toString()}"
def templateName = "pipeline-worker"
pipeline {
agent {
kubernetes {
yaml functions.podYaml(
repo: repository,
templateName: templateName,
alpine: true
)
}
}
// list of urls that return different nordVPN servers
def nordURLs = [
// canada
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// france
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:74,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// gremany
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:81,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// japan
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:108,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// sweden
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:208,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// switzerland
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:209,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// netherlands
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:153,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// united kingdom
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
]
// randomly select one from the list
def nordURL = nordURLs[Math.abs(new Random().nextInt() % [8])]
stages {
stage ('Initalize Jenkins') {
steps {
script {
workspace = pwd()
// jenkins secrets
nordCreds = "nordvpn-login-creds"
// script used to retrieve a nordVPN OpenVPN configuration from NordVPN
def openVPNConfigScript = """# Get OpenVPN Config
// kubernetes configuration
kubeNamespace = "dl-automation"
kubeSecret = "openvpn"
// list of urls that return different nordVPN servers
def nordURLs = [
// canada
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// france
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:74,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// gremany
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:81,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// japan
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:108,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// sweden
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:208,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// switzerland
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:209,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// netherlands
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:153,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
// united kingdom
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
]
// randomly select one from the list
nordURL = nordURLs[Math.abs(new Random().nextInt() % [8])]
}
}
}
stage ('Prepare Container') {
steps {
container ('alpine') {
script {
sh """
if [ ! -f "/usr/bin/curl" ] || [ ! -x "/usr/bin/curl" ]; then
apk add --no-cache curl
fi
if [ ! -f "/usr/bin/jq" ] || [ ! -x "/usr/bin/jq" ]; then
apk add --no-cache jq
fi
if [ ! -f "/bin/sed" ] || [ ! -x "/bin/sed" ]; then
apk add --no-cache sed
fi
"""
}
openVPNConfig = sh(
returnStdout: true,
script: """# Get OpenVPN Config
curl \
--silent \
--location \
@ -53,46 +101,17 @@ curl \
--expression='s/auth-user-pass/auth-user-pass \\/etc\\/openvpn\\/client\\/openvpn-credentials.txt/' \
| base64 -w 0
"""
)
withCredentials(
[
string(
credentialsId: nordCreds,
variable: "NORD_CREDS",
)
]
) {
def label = "kubernetes-${UUID.randomUUID().toString()}"
def templateName = "pipeline-worker"
podTemplate(
label: label,
name: templateName,
yaml: functions.podYaml(
repo: repository,
templateName: templateName,
alpine: true
)
) {
node (label) {
def workspace = pwd()
stage ("Prepare Container") {
container ("alpine") {
sh """
apk add --no-cache curl jq sed
"""
}
}
def openVPNConfig
stage ("Get Remote OpenVPN Config") {
container ("alpine") {
openVPNConfig = sh(
returnStdout: true,
script: openVPNConfigScript
)
}
}
def k8sSecret
stage ("Compile Secret") {
withCredentials([string(
credentialsId: nordCreds,
variable: "NORD_CREDS",
)]) {
k8sSecret = """apiVersion: v1
k8sSecret = """apiVersion: v1
kind: Secret
metadata:
name: """ + kubeSecret + """
@ -101,21 +120,39 @@ data:
openvpn-credentials.txt: """ + NORD_CREDS + """
nordvpn.com.tcp.ovpn: """ + openVPNConfig + """
"""
}
}
}
}
functions.createSecret(
kubeAuth: "k8s-dl-automation-access",
kubeURL: "https://kubernetes.test-chamber-13.lan:6443",
namespace: "dl-automation",
secret: k8sSecret
)
functions.deletePod(
kubeAuth: "k8s-dl-automation-access",
kubeURL: "https://kubernetes.test-chamber-13.lan:6443",
namespace: "dl-automation",
selector: "app=deluge"
)
stage ('Create Secret') {
steps {
container ('alpine') {
script {
declarativeFunctions.createSecret(
kubeAuth: "k8s-dl-automation-access",
kubeURL: "https://kubernetes.test-chamber-13.lan:6443",
namespace: "dl-automation",
secret: k8sSecret
)
}
}
}
}
stage ('Restart Pod') {
steps {
container ('alpine') {
script {
declarativeFunctions.deletePod(
kubeAuth: "k8s-dl-automation-access",
kubeURL: "https://kubernetes.test-chamber-13.lan:6443",
namespace: "dl-automation",
selector: "app=deluge"
)
}
}
}
}
}
}