197 lines
9.4 KiB
Groovy
197 lines
9.4 KiB
Groovy
#!groovy
|
|
|
|
def repository = "registry.c.test-chamber-13.lan"
|
|
def repositoryCreds = "harbor-repository-creds"
|
|
|
|
def workspace
|
|
def dockerFile
|
|
def nordCreds
|
|
def kubeNamespace
|
|
def kubeSecret
|
|
def nordURL
|
|
def openVPNConfig
|
|
def k8sSecret
|
|
|
|
def label = "kubernetes-${UUID.randomUUID().toString()}"
|
|
def templateName = "pipeline-worker"
|
|
pipeline {
|
|
agent {
|
|
kubernetes {
|
|
yaml functions.podYaml(
|
|
repo: repository,
|
|
templateName: templateName,
|
|
alpine: true
|
|
)
|
|
}
|
|
}
|
|
|
|
stages {
|
|
stage ('Initalize Jenkins') {
|
|
steps {
|
|
script {
|
|
workspace = pwd()
|
|
// jenkins secrets
|
|
nordCreds = "nordvpn-login-creds"
|
|
// kubernetes configuration
|
|
kubeNamespace = "dl-automation"
|
|
kubeSecret = "openvpn"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage ('Prepare Values') {
|
|
steps {
|
|
container ('alpine') {
|
|
script {
|
|
retry(3) {
|
|
try {
|
|
// 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\\]\\}",
|
|
// costa-rica
|
|
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:52,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}",
|
|
// denmark
|
|
"https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:58,%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])]
|
|
|
|
// install required components
|
|
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
|
|
"""
|
|
}
|
|
|
|
// get OpenVPN Configuration from NordVPN
|
|
openVPNConfig = sh(
|
|
returnStdout: true,
|
|
script: """# Get OpenVPN Config
|
|
curl \
|
|
--silent \
|
|
--location \
|
|
--fail \
|
|
"https://downloads.nordcdn.com/configs/files/ovpn_tcp/servers/\$(
|
|
curl \
|
|
--silent \
|
|
--location \
|
|
--fail \
|
|
'""" + nordURL + """' \
|
|
| jq \
|
|
--raw-output \
|
|
'[.[] | select(.technologies[] | .identifier == "openvpn_tcp")][0] | .hostname' \
|
|
).tcp.ovpn" \
|
|
| sed \
|
|
--regexp-extended \
|
|
--expression='s/auth-user-pass/auth-user-pass \\/etc\\/openvpn\\/client\\/openvpn-credentials.txt/' \
|
|
| base64 -w 0
|
|
"""
|
|
)
|
|
|
|
// check for error
|
|
if (openVPNConfig.length() == 0 || openVPNConfig == "") {
|
|
throw new Exception(nordURL)
|
|
}
|
|
} catch(e) {
|
|
println(sprintf("Bad nordURL: %s", nordURL))
|
|
throw e
|
|
}
|
|
}
|
|
|
|
// Create K8S Secret
|
|
withCredentials(
|
|
[
|
|
string(
|
|
credentialsId: nordCreds,
|
|
variable: "NORD_CREDS",
|
|
)
|
|
]
|
|
) {
|
|
k8sSecret = """apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: """ + kubeSecret + """
|
|
namespace: """ + kubeNamespace + """
|
|
data:
|
|
openvpn-credentials.txt: """ + NORD_CREDS + """
|
|
nordvpn.com.tcp.ovpn: """ + openVPNConfig + """
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage ('Update Secret') {
|
|
steps {
|
|
container ('alpine') {
|
|
script {
|
|
declarativeFunctions.createSecret(
|
|
kubeAuth: "k8s-dl-automation-access",
|
|
kubeURL: "https://k8s.test-chamber-13.lan:8043",
|
|
namespace: "dl-automation",
|
|
secret: k8sSecret
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage ('Read Secret') {
|
|
steps {
|
|
container ('alpine') {
|
|
script {
|
|
def result = declarativeFunctions.createSecret(
|
|
kubeAuth: "k8s-dl-automation-access",
|
|
kubeURL: "https://k8s.test-chamber-13.lan:8043",
|
|
namespace: "dl-automation",
|
|
secret: k8sSecret,
|
|
secretID: "nordvpn.com.tcp.ovpn"
|
|
)
|
|
if result.length() == 0 {
|
|
throw new Exception("Secret is empty.")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage ('Restart Pod') {
|
|
steps {
|
|
container ('alpine') {
|
|
script {
|
|
declarativeFunctions.deletePod(
|
|
kubeAuth: "k8s-dl-automation-access",
|
|
kubeURL: "https://k8s.test-chamber-13.lan:8043",
|
|
namespace: "dl-automation",
|
|
selector: "app=deluge"
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |