zoukankan      html  css  js  c++  java
  • 用Vagrant创建Jenkins构建环境

    用Vagrant创建Jenkins构建环境

    这是一个关于Vagrant的学习系列,包含如下文章:

    1. Vagrant入门
    2. 创建自己的Vagrant box 
    3. 用Vagrant搭建Jenkins构建环境
    4. 用Vagrant和Ansible搭建持续交付平台

    上一篇文章中,我们讲到了如何创建自己的vagrant box。本文中,我们将使用Vagrant一次性创建3台虚拟机以组成一个Jenkins的master-slave构建环境,其中包含1台Jenkins master机器,2台slave机器。我们将采用Shell作为provision工具,当然你也可以使用像Ansible、Chef等。

    本文源代码:https://github.com/davenkin/vagrant/tree/master/multi-machine-jenkins-cluster-ubuntu1404

    在Vagrantfile中,通过config.vm.define来定义多台机器,通过引用外部的Shell脚本进行provision,Vagrantfile如下:

    复制代码
    Vagrant.configure("2") do |config|
      config.vm.box = "ubuntu/trusty64"
    
      config.vm.define "master" do |master|
          master.vm.network "private_network", ip: "192.168.2.2"
          master.vm.provision "shell", path: "master_provision.sh"
          master.vm.provider "virtualbox" do |v|
            v.name = "jenkins-master"
          end
      end
    
      config.vm.define "slave1" do |slave1|
          slave1.vm.network "private_network", ip: "192.168.2.3"
          slave1.vm.provision "shell", path: "slave_provision.sh"
          slave1.vm.provider "virtualbox" do |v|
            v.name = "jenkins-slave1"
          end
      end
    
      config.vm.define "slave2" do |slave2|
          slave2.vm.network "private_network", ip: "192.168.2.4"
          slave2.vm.provision "shell", path: "slave_provision.sh"
          slave2.vm.provider "virtualbox" do |v|
            v.name = "jenkins-slave2"
          end
      end
    end
    复制代码

    在每一个config.vm.define的配置内部,我们可以使用与其外部相同的配置项,内部配置会覆盖外部配置。这样,我们可以在外部配置中设置一些所有机器都共享的配置信息,然后在每个config.vm.define内部中针对性地配置某一台机器。

    我们使用private network组成一个局域网,分别为各台机器指定静态的IP地址,此时其实使用的Virtualbox的Host-only网络类型。

    对于master机器而言,我们首先需要安装JDK,然后安装Jenkins server,此时的master_provision.sh如下:

    复制代码
    #! /bin/bash
    #change apt source to be inside China to speed up apt
    sudo mv /etc/apt/sources.list /etc/apt/sources.list.old
    sudo cp /vagrant/sources.list /etc/apt/sources.list
    
    #prepare for jenkins installation
    wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
    
    #install openjdk
    sudo apt-get -y install default-jdk
    
    #install jenkins
    sudo apt-get -y install jenkins
    复制代码

    请注意,在provision一开始,我们更新了apt的源以提高下载速度。此时的sources.list包含以下阿里云的源:

    复制代码
    deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
    复制代码

    对于两台slave机器来说,我们只需要安装JDK即可(其他软件,比如SSH等都已经包含在ubuntu/trusty64 box中了),对两台slave执行同一份provision文件provision_slave.sh:

    复制代码
    #! /bin/bash
    #change apt source to be inside China to speed up apt
    sudo mv /etc/apt/sources.list /etc/apt/sources.list.old
    sudo cp /vagrant/sources.list /etc/apt/sources.list
    
    sudo apt-get update
    #install openjdk
    sudo apt-get -y install default-jdk
    复制代码

    运行“vagrant up”,在Virtualbox中将出现三台虚拟机,他们与host机器同属于一个局域网,相互可连通。

    在host机器中打开http://192.168.2.2:8080(即Jenkins master),开始初始化配置Jenkins:

    Jenkins要求输入初始的admin密码,密码位于文件/var/lib/jenkins/secrets/initialAdminPassword中,请注意,该文件为master机器上的文件,而不是host机上的。此时我们通过“vagrant ssh master”登录到master机器上,该文件的内容即为admin的初始密码。之后Jenkins将提示我们安装一些必要的插件,安装Jenkins推荐的插件即可,之后Jenkins还会让我们创建一个真正的admin用户,完了就可以使用Jenkins了。

    不过此时的Jenkins master还并不知道slave机器的存在,为了能使用slave机器,我们需要将master机上用户“jenkins”的public key上传到每一台slave机器上,这里我们选择slave上的“vagrant”用户作为构建Jenkins job的用户,即我们需要先在master机器上为jenkins用户生成一对keypair,然后将public key加入到每台slave机上vagrant用户的authorised_keys文件中。这个过程是标准的SSH配置过程,请参考这里。另外,为了使master能够通过SSH连接slave,我们还需要以master机器上的jenkins用户的private key添加一个Credential,这里我们添加一个名为vagrant的Credential,采用直接输入密钥的方式填入jenkins用户的密钥:

    在配置好了SSH之后,便可以在Jenkins中加入slave了:进入添加新node页面:

    这里有几点需要注意,在“Romote root directory”中,必须填入“/home/vagrant”,因为这是vagrant用户拥有读写权限的目录;另外,在“Launch method”中,选择“Launch slave agents on Unix machines via SSH”,最后在Credentials中选择在先前添加的vagrant。

    在下一篇中,我们将讲到如何用Vagrant和Ansible搭建持续交付平台

  • 相关阅读:
    mac 下 安装 mongodb
    ajax常见的面试问题
    js 数组api
    vue 项目中的坑 在项目中遇到 持续更新ing
    移动端适配问题
    axios API速查表
    移动端常用的 meta设置
    python 首次安装 报错
    在vue项目中使用sass
    SPA单页面应用
  • 原文地址:https://www.cnblogs.com/handongyu/p/7488299.html
Copyright © 2011-2022 走看看