adds isc-bind
This commit is contained in:
parent
9bc26437f7
commit
135d533615
173
build-bind.jenkins
Normal file
173
build-bind.jenkins
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
def repository = "registry.c.test-chamber-13.lan"
|
||||||
|
def repositoryCreds = "harbor-repository-creds"
|
||||||
|
|
||||||
|
def workspace
|
||||||
|
def dockerFile
|
||||||
|
def startFile
|
||||||
|
def signzoneFile
|
||||||
|
|
||||||
|
def label = "kubernetes-${UUID.randomUUID().toString()}"
|
||||||
|
def templateName = "pipeline-worker"
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
kubernetes{
|
||||||
|
yaml functions.podYaml(
|
||||||
|
repo: repository,
|
||||||
|
templateName: templateName,
|
||||||
|
kaniko: true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage ('Initalize Jenkins') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
workspace = pwd()
|
||||||
|
startFile = """
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
SIGN_DOMAINS="\$(ls -1 /var/named/masters)" sign-zone.sh
|
||||||
|
chown -R bind:bind /var/named
|
||||||
|
bind_exporter --bind.stats-url="http://127.0.0.1:8553" --web.listen-address=0.0.0.0:8053 &
|
||||||
|
/usr/sbin/named -g -c /etc/bind/named.conf -u bind
|
||||||
|
"""
|
||||||
|
writeFile(file: workspace + "/start.sh", text: startFile)
|
||||||
|
|
||||||
|
signzoneFile = """
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
# Keys directory
|
||||||
|
KEYDIR="/var/named/keys"
|
||||||
|
|
||||||
|
# Zone directory
|
||||||
|
ZONEDIR="/var/named/masters"
|
||||||
|
|
||||||
|
# Destination directory
|
||||||
|
DESTDIR="/var/named/dynamic"
|
||||||
|
|
||||||
|
function CleanJournal () {
|
||||||
|
if [ -e "\${DESTDIR}/\${DOMAIN}.signed.jnl" ]; then
|
||||||
|
printf 'Removing Journal File: %s\n' "\${DOMAIN}"
|
||||||
|
rm -f "\${DESTDIR}/\${DOMAIN}.signed.jnl"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function SignZone () {
|
||||||
|
CleanJournal "\${DOMAIN}"
|
||||||
|
RANDOM_HASH=\$(head -c 1000 /dev/random | sha1sum | cut -b 1-16)
|
||||||
|
EXP=\$(( \$(/bin/date +%Y) + 1))\$(/bin/date +%m%d)000000
|
||||||
|
TEMP_FILE=\$(mktemp /tmp/zone-XXXXXXXXXX)
|
||||||
|
|
||||||
|
printf '%s\\n' "Updating Zone Serial"
|
||||||
|
cp "\${ZONEDIR}/\${DOMAIN}" "\${TEMP_FILE}"
|
||||||
|
sed -i -r -e "s/[0-9]+\t; Serial/\$(date +%Y%m%d%H)\t; Serial/" "\${TEMP_FILE}"
|
||||||
|
|
||||||
|
# If key files do not exist, generate them.
|
||||||
|
if [ -e "\${KEYDIR}/K\${DOMAIN}*.key" ]; then
|
||||||
|
# Keys does not exist so we will generate them
|
||||||
|
printf '%s\\n' "Creating Key Signing Key (4096-bit)"
|
||||||
|
dnssec-keygen -K \${KEYDIR} -f KSK -a RSASHA256 -3 -b 4096 -n ZONE "\${DOMAIN}"
|
||||||
|
printf '%s\\n' "Creating Zone Signing Key (4096-bit)"
|
||||||
|
dnssec-keygen -K \${KEYDIR} -a RSASHA256 -3 -b 4096 -n ZONE "\${DOMAIN}"
|
||||||
|
|
||||||
|
# Append keys to Zone
|
||||||
|
cat "\${KEYDIR}/K\${DOMAIN}*.key" >> "\${TEMP_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Locate the Key Signing Key
|
||||||
|
if ! KSK=\$(grep -i -H "key-signing key" "\${KEYDIR}/K\${DOMAIN}"*.key | cut -d: -f1); then
|
||||||
|
printf '%s\n' "ERROR: Unable to detect Key Signing Key"
|
||||||
|
exit 100
|
||||||
|
fi
|
||||||
|
filename=\$(basename "\${KSK}")
|
||||||
|
KSKBASE=\${filename%.*}
|
||||||
|
|
||||||
|
# Locate the Zone Signing Key
|
||||||
|
if ! ZSK=\$(grep -i -H "zone-signing key" "\${KEYDIR}/K\${DOMAIN}"*.key | cut -d: -f1); then
|
||||||
|
printf '%s\\n' "ERROR: Unable to detect Zone Signing Key"
|
||||||
|
exit 100
|
||||||
|
fi
|
||||||
|
filename=\$(basename "\${ZSK}")
|
||||||
|
ZSKBASE=\${filename%.*}
|
||||||
|
|
||||||
|
printf '%s\\n' "Signing Zone: \${DOMAIN}"
|
||||||
|
cd "\${KEYDIR}" || exit 100
|
||||||
|
dnssec-signzone -3 "\${RANDOM_HASH}" -u -N INCREMENT -o "\${DOMAIN}" -k "\${KSKBASE}" -e "\${EXP}" -f "\${DESTDIR}/\${DOMAIN}.signed" "\${TEMP_FILE}" "\${KEYDIR}/\${ZSKBASE}.private"
|
||||||
|
|
||||||
|
printf '\\n%s\\n' "*** DNSSEC DS RR Generation ***"
|
||||||
|
dnssec-dsfromkey -2 "\${KEYDIR}/\${KSKBASE}.key"
|
||||||
|
|
||||||
|
printf '%s\\n' "Cleaning Temporary File"
|
||||||
|
rm -f "\${TEMP_FILE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check to see how we were called
|
||||||
|
if [ ! -z \${SIGN_DOMAINS+x} ]; then
|
||||||
|
for DOMAIN in \${SIGN_DOMAINS}; do
|
||||||
|
if [ ! -e "\${ZONEDIR}/\${DOMAIN}" ]; then
|
||||||
|
printf '%s\n' "ERROR: Unable to locate Zone: \${DOMAIN}"
|
||||||
|
exit 100
|
||||||
|
else
|
||||||
|
SignZone "\${DOMAIN}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [ "\${#}" -gt 0 ]; then
|
||||||
|
for DOMAIN in "\${@}"; do
|
||||||
|
if [ ! -e "\${ZONEDIR}/\${DOMAIN}" ]; then
|
||||||
|
printf '%s\n' "ERROR: Unable to locate Zone: \${DOMAIN}"
|
||||||
|
exit 100
|
||||||
|
else
|
||||||
|
SignZone "\${DOMAIN}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
printf '%s' "Please enter the Zone (domain) in lowescase: "
|
||||||
|
read -r DOMAIN
|
||||||
|
SignZone "\${DOMAIN}"
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
writeFile(file: workspace + "/sign-zone.sh", text: signzoneFile)
|
||||||
|
|
||||||
|
dockerFile = """
|
||||||
|
FROM registry.hub.docker.com/internetsystemsconsortium/bind9:9.18
|
||||||
|
|
||||||
|
COPY *.sh /usr/local/bin/
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends dnsutils && \
|
||||||
|
chmod +x /usr/local/bin/start.sh /usr/local/bin/sign-zone.sh
|
||||||
|
|
||||||
|
CMD [ "/bin/bash", "-c", "start.sh" ]
|
||||||
|
"""
|
||||||
|
writeFile(file: workspace + "/test-chamber-13.lan.root.crt", text: functions.getCurrentRootCA())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage ('Build & Push') {
|
||||||
|
steps {
|
||||||
|
container ('kaniko') {
|
||||||
|
script {
|
||||||
|
declarativeFunctions.buildContainerMultipleDestinations(
|
||||||
|
dockerFile: dockerFile,
|
||||||
|
repositoryAccess: [
|
||||||
|
[
|
||||||
|
repository: repository,
|
||||||
|
credentials: repositoryCreds
|
||||||
|
],
|
||||||
|
[
|
||||||
|
repository: "https://index.docker.io/v1/",
|
||||||
|
credentials: "dockerhub-repository-creds"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
destination: [
|
||||||
|
"index.docker.io/thespider/bind9:latest",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user