Los certificados https son requeridos cada dia mas por mas servicios. Aqui os dejo un par de imagenes docker que con una simple pipeline y un dns publico podemos crear certificados por los dominios que usemos. Lo bueno que tiene el poder crear certificados standalone es que una vez exportados ya podemos integrados en una red interna donde controlemos tambien el dns o en servicios publicos pero que no usen el puertos 80, como por ejemplo un servidor mail.

Ahora que tengo un jenkins y una pipline que me almacena los certificados, crearlos y almacenarlos es mas facil que nunca.

Lo primero que tenemos que hacer es tener un servidor con ip publica y los puertos 80 y 8080 con docker instalado.

Lo sigueinte es pulear la imagen jenkins de mi repositorio, es un poco especial por lo que os advierto que esto no se puede hacer con la imagen de jenkins oficial de docker.

docker pull akaronte/jenkins-docker

Una vez descargado arrancamos el contenedor

docker run --name jenkins-docker -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -d akaronte/jenkins-docker

Entramos al contenedor para obtener la clave de inicio de jenkins e instalamos los plugins recomendados.

docker exec -ti -u root jenkins-docker bash
cat /var/jenkins_home/secrets/initialAdminPassword

La copiamos y nos vamos al puerto 8080 del servidor en el navegador

Ademas de los plugins standar tenemos que añadir los plugins docker y docker pipeline

Una vez instalados los plugins creamos una nueva pipeline con dos parametos «mail» y «domain»

Y ya solo nos queda poner el nuestro mail y el dominio del que queremos generar certificados, obviamente la dns tiene que estar apuntando a la ip del servidor donde estemos corriendo nuestro contenedor jenkins.

https://hub.docker.com/r/akaronte/jenkins-docker

https://github.com/Akaronte/letsEncrypt-o-matik

pipeline {
    agent any
        parameters {
            string(name: 'domain', defaultValue: '', description: 'hostname')
            string(name: 'mail', defaultValue: '', description: 'mail')
        }
    stages {
        stage('Docker pull') {
            steps {
            sh "docker pull akaronte/certbot"
            }
        }
        stage('Run certbot') {
            agent {
                docker {
                    image 'akaronte/certbot'
                    args "-u root -p 80:80 -v ${WORKSPACE}:/mnt"
                }
            }
            steps {
                sh """
                /usr/sbin/nginx
                certbot certonly --email ${params.mail} --agree-tos --non-interactive --webroot -w "/var/www/html" -d ${params.domain}
                cp -r /etc/letsencrypt/archive/${params.domain}/* ${WORKSPACE}
                cd ${WORKSPACE}
                ls
                chmod -R 666 *
                cp fullchain1.pem ${params.domain}.crt
                cp fullchain1.pem ${params.domain}.crt.remove
                cp privkey1.pem	${params.domain}.key
                
                """
                archiveArtifacts artifacts: '*.pem'
                archiveArtifacts artifacts: '*.crt'
                archiveArtifacts artifacts: '*.crt.remove'
                archiveArtifacts artifacts: '*.key'
            }
        }
    }
    post{
        cleanup {
            echo "CLEAN"
            cleanWs()
        }
    }
}

Para descar el .ctr y el .key desde linux

curl -u "user":"pass" http://kluster.tk:8080/job/lets-encrypt-o-matik/lastSuccessfulBuild/artifact/kluster.cf.crt --output kluster.cf.crt

curl -u "user":"pass" http://kluster.tk:8080/job/lets-encrypt-o-matik/lastSuccessfulBuild/artifact/kluster.cf.key --output kluster.cf.key

Cambiar el nombres del job y el dominio que useis.

Categorías: Jenkins

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *