使用Terraform在AWS上部署简单的Jenkins

持续集成,持续交付和持续部署,这些概念和术语可以协同工作以实现应用程序生命周期的自动化,在这方面,如果您要实施CI/ CD,Jenkins可能是建立服务器以自动化该过程的主要工具。

这篇文章是部署以AWS Amazon作为IaaS的Jenkins的简单任务。为了全面了解,我们将安装Jenkins及其插件,注册用户,设置基本的安全规则,最后插入一个作业作为示例,因此,让我们进一步阐述一下这个想法。

先决条件

  • AWS Amazon中的EC2实例来测试此技术说明。

  • 安装terraform作为“基础结构即代码”工具。

安装Jenkins及其工作

首先,我们需要观看本节,因为这是我们可以找到如何通过脚本bash安装Jenkins的过程,该bash脚本是作为通用脚本制作的,可在不同的CentOS Linux上使用。此安装分为5部分,首先我们将安装并启动Jenkins,然后我们将注册一个默认用户并安装基本插件,最后,注册我们最好的朋友HelloWorld job,这将是一个很好的例子一个好的开始。

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"
}

请注意,bash脚本中的plugins函数对于首次安装登录Jenkins时建议的所有插件是必需的,这是自定义此工具的一部分,并且是注册默认用户所必需的。循环以检查Jenkins服务器是否正在运行,您可以在启动和插件功能时观看。

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"
}

您还记得启动Jenkins服务器的公告吗?如果您不想再看到它,则应该实现插件功能。
使用Terraform在AWS上部署简单的Jenkins

下面是一个简单的任务,介绍了如何通过Jenkins CLI在Jenkins中添加作业,这是带有字符串参数的Pipeline作业。

<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.40">
  <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="workflow-cps@2.83">
    <script>pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                echo "Hello World!"
            }
        }
    }
}</script>
    <sandbox>true</sandbox>
  </definition>
  <triggers/>
  <disabled>false</disabled>
</flow-definition>

将Jenkins部署为服务器

该文件中提供了常规变量,请注意一些属性,这些属性需要由您配置的AWS CLI变量替换。请参阅《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"
  }
}

有几个属性需要设置:

access_keysecret_key:用作访问密钥,用于验证命令请求。

jenkins_key_name:密钥对文件的名称,将有助于通过ssh连接到我们的实例。如果您需要创建密钥对,请通过我的安全凭证部分中的处理程序进入您的AWS账户。注意,在此示例中,我们使用了位于该项目的Template文件夹中的key-pair.pem,用您的凭据替换此文件及其在项目中的名称。

amis:此属性可以是一个列表,并具有可以在Amazon Machine Instances中轻松找到的AMI实例ID,如果您想更改此AMI实例,请注意是否已安装AMI已安装systemctl,因为Amazon Linux不支持systemclt或服务命令基于其基于CentOS / RHEL的版本,因此为了避免花费大量时间搜索已经配置了他的systemctl的AMI实例,请尝试使用在此项目中配置的AMI实例。

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}"
    ]
  }
}

一旦配置了所有属性,请执行命令行terraform init初始化工作文件夹,执行terraform计划以监视所有部署计划,一旦检查完成,请执行命令行terraform申请部署基础架构。

进入詹金斯

可以在AWS管理控制台中找到,单击“实例”部分,然后应如下创建一个新实例。

使用Terraform在AWS上部署简单的Jenkins

复制公共DNS,并在浏览器上键入此值,然后键入端口8080(如镜像所示),记住所有可用端口在main.tf文件的安全组部分中。用户和密码被配置为variables.tf文件中的属性,因此在这种情况下,我们的用户和密码为“ Jenkins”。

使用Terraform在AWS上部署简单的Jenkins

结论

简单实用,如果您想浏览此代码,请在此存储库中单击。也许,您已经看过许多有关Jenkins的安装,但是我在许多安装中都使用了这种bash和安装方式,它使这些基本活动变得很轻松:注册用户,注册基本工作和安装插件。希望这项贡献对您有所帮助。

脚本库地址:https://github.com/moballiachi/cicd-jenkins.git

实战课程: DevOps流水线实践 https://edu.51cto.com/sd/36f6e