Utilisez Terraform pour déployer des Jenkins simples sur AWS

Utilisez Terraform pour déployer des Jenkins simples sur AWS

Intégration continue, livraison continue et déploiement continu. Ces concepts et termes peuvent fonctionner ensemble pour automatiser le cycle de vie de l'application. À cet égard, si vous souhaitez implémenter CI / CD, Jenkins peut être le principal outil de création de serveurs pour automatiser le processus.

Cet article est une tâche simple de déploiement de Jenkins avec AWS Amazon en tant qu'IaaS. Afin de bien comprendre, nous allons installer Jenkins et ses plugins, enregistrer les utilisateurs, définir les règles de sécurité de base et enfin insérer un travail à titre d'exemple, alors développons davantage cette idée.

conditions préalables

  • Instance EC2 dans AWS Amazon pour tester cette description technique.

  • Installez terraform en tant qu'outil «infrastructure as code».

Installez Jenkins et son travail

Tout d'abord, nous devons regarder cette section, car c'est le processus où nous pouvons découvrir comment installer Jenkins via le script bash, qui est fait comme un script général et peut être utilisé sur différents CentOS Linux. Cette installation est divisée en 5 parties, nous allons d'abord installer et démarrer Jenkins, puis nous enregistrerons un utilisateur par défaut et installerons les plugins de base, et enfin, enregistrerons notre meilleur ami HelloWorld job, ce sera un bon exemple et un bon début .

jenkins_user=$1
jenkins_password=$2
jenkins_address=http://localhost:8080

set -x

function installing()
{
    #Installing some necessary dependencies 
    sudo yum -y update
    sudo yum -y install wget java-1.8.0 nano 

    #Installing jenkins, instructions located in http://pkg.jenkins-ci.org/redhat/
    sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
    sudo yum install -y jenkins

    sleep 1
    echo "[INFO]  Jenkins was installed"
}

Veuillez noter que la fonction plugins dans le script bash est nécessaire pour installer tous les plug-ins recommandés lors de la première connexion à Jenkins. Cela fait partie de la personnalisation de cet outil et est nécessaire pour enregistrer l'utilisateur par défaut. Boucle pour vérifier si le serveur Jenkins est en cours d'exécution, vous pouvez le regarder au démarrage et aux fonctions du plugin.

function plugins()
{
    #Installing jenkins plugins 
    java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  install-plugin trilead-api
    java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  install-plugin cloudbees-folder

    ... many more plugins ...

    java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  install-plugin pam-auth 
    java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  install-plugin ldap
    java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  install-plugin email-ext 

    # Restart
    sudo systemctl restart jenkins &
    while (( 1 )); do
      echo "[INFO]   waiting for restart Jenkins on port [8080] ..."

      java -jar jenkins-cli.jar -s "$jenkins_address" -auth $jenkins_user:$jenkins_password  list-jobs
      if (( $? == 0 )); then
          break
      fi

      sleep 20
    done

    echo "[INFO]   Jenkins was restarted"
}

Vous souvenez-vous de l'annonce du démarrage du serveur Jenkins? Si vous ne voulez pas le revoir, vous devez implémenter la fonction de plug-in.
Utilisez Terraform pour déployer des Jenkins simples sur AWS

Voici une tâche simple qui explique comment ajouter un travail dans Jenkins via la CLI Jenkins, qui est un travail Pipeline avec des paramètres de chaîne.

<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="[email protected]">
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        <hudson.model.StringParameterDefinition>
          <name>par_name</name>
          <description></description>
          <defaultValue>HelloWorld</defaultValue>
          <trim>false</trim>
        </hudson.model.StringParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
  </properties>
  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="[email protected]">
    <script>pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                echo "Hello World!"
            }
        }
    }
}</script>
    <sandbox>true</sandbox>
  </definition>
  <triggers/>
  <disabled>false</disabled>
</flow-definition>

Déployer Jenkins en tant que serveur

Les variables générales sont fournies dans ce fichier. Veuillez noter que certains attributs doivent être remplacés par les variables AWS CLI que vous configurez. Pour plus d'informations, consultez la référence des commandes de l'AWS CLI .

variable "region" {
  default  = "us-east-1"
  description = "AWS region"
}

variable "access_key" {
  default  = "HEREYOURACCESSKEY"
  description = "AWS credentials file path"
}

variable "secret_key" {
  default  = "HEREYOURSECRETKEY"
  description = "AWS credentials file path"
}

variable "jenkins_user_name" {
  description = "jenkins"
  default = "jenkins"
}

variable "jenkins_user_password" {
  description = "jenkins"
  default = "jenkins"
}

variable "jenkins_name" {
  description = "Jenkins name"
  default = "jenkins"
}

variable "jenkins_instance_type" {
  default = "t2.micro"
}

variable "jenkins_key_name" {
  default = "key-pair"
  description = "SSH key located in tyour AWS account."
}

variable "amis" {
  description = "ami to spawn."
  default = { 
    us-east-1 = "ami-0c94855ba95c71c99"
  }
}

Plusieurs propriétés doivent être définies:

access_key et secret_key : utilisés comme clés d'accès pour vérifier les demandes de commande.

jenkins_key_name : Le nom du fichier de paire de clés, qui aidera à se connecter à notre instance via ssh. Si vous devez créer une paire de clés, veuillez saisir votre compte AWS via la procédure de traitement dans la section Mes informations d'identification de sécurité . Notez que dans cet exemple, nous avons utilisé key-pair.pem situé dans le dossier Template du projet, en remplaçant ce fichier et son nom dans le projet par vos informations d'identification.

amis : cet attribut peut être une liste et possède un ID d'instance AMI qui peut être facilement trouvé dans les instances Amazon Machine. Si vous souhaitez modifier cette instance AMI, veuillez vérifier si l'AMI est installée et systemctl est installé, car Amazon Linux ne prend pas en charge systemclt ou services La commande est basée sur sa version basée sur CentOS / RHEL, donc afin d'éviter de passer beaucoup de temps à rechercher une instance AMI qui a été configurée avec son systemctl, veuillez essayer d'utiliser l'instance AMI configurée dans ce projet.

resource "aws_instance" "jenkins" {
  instance_type = "${var.jenkins_instance_type}"
  security_groups = ["${aws_security_group.security_group_jenkins.name}"]
  ami = "${lookup(var.amis, var.region)}"
  key_name = "${var.jenkins_key_name}"

  # Add jenkins server startup
  provisioner "file" {
    connection {
      user = "ec2-user"
      host = "${aws_instance.jenkins.public_ip}"
      timeout = "1m"
      private_key = "${file("templates/${var.jenkins_key_name}.pem")}"
    }
    source = "templates/jenkins_startup.sh"
    destination = "/home/ec2-user/jenkins_startup.sh"
  }

  # Add jenkins job
  provisioner "file" {
    connection {
      user = "ec2-user"
      host = "${aws_instance.jenkins.public_ip}"
      timeout = "1m"
      private_key = "${file("templates/${var.jenkins_key_name}.pem")}"
    }
    source = "templates/jobmaster.xml"
    destination = "/home/ec2-user/jobmaster.xml"
  }

  provisioner "remote-exec" {
    connection {
      user = "ec2-user"
      host = "${aws_instance.jenkins.public_ip}"
      timeout = "1m"
      private_key = "${file("templates/${var.jenkins_key_name}.pem")}"
    }
    inline = [
      "chmod +x /home/ec2-user/jenkins*.sh",
      "/home/ec2-user/jenkins_startup.sh ${var.jenkins_user_name} ${var.jenkins_user_password}"
    ]
  }
}

Une fois que toutes les propriétés sont configurées, exécutez la ligne de commande terraform init pour initialiser le dossier de travail, exécutez le plan terraform pour surveiller tous les plans de déploiement, et une fois la vérification terminée, exécutez la ligne de commande terraform à appliquer pour l'infrastructure de déploiement.

Entre Jenkins

Il peut être trouvé dans AWS Management Console , cliquez sur la section «Instance», puis une nouvelle instance doit être créée comme suit.

Utilisez Terraform pour déployer des Jenkins simples sur AWS

Copiez le DNS public et tapez cette valeur sur le navigateur, puis tapez le port 8080 (comme indiqué dans l'image), en vous rappelant que tous les ports disponibles se trouvent dans la section du groupe de sécurité du fichier main.tf. L'utilisateur et le mot de passe sont configurés en tant qu'attributs dans le fichier variables.tf, donc dans ce cas, notre utilisateur et notre mot de passe sont "Jenkins".

Utilisez Terraform pour déployer des Jenkins simples sur AWS

en conclusion

Simple et pratique, si vous souhaitez parcourir ce code, veuillez cliquer dans ce référentiel. Vous avez peut-être vu de nombreuses installations à propos de Jenkins, mais j'ai utilisé cette méthode de bash et d'installation dans de nombreuses installations.Cela rend ces activités de base très faciles: enregistrer les utilisateurs, enregistrer les tâches de base et installer des plugins. J'espère que cette contribution vous sera utile.

Adresse de la bibliothèque de scripts: https://github.com/moballiachi/cicd-jenkins.git

Cours pratique: pratique du pipeline DevOps https://edu.51cto.com/sd/36f6e

Je suppose que tu aimes

Origine blog.51cto.com/11064706/2544016
conseillé
Classement