用Vagrant创建Jenkins构建环境
这是一个关于Vagrant的学习系列,包含如下文章:
在上一篇文章中,我们讲到了如何创建自己的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("") 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搭建持续交付平台。
用Vagrant创建Jenkins构建环境的更多相关文章
- Docker下搭建Jenkins构建环境
首先需要搭建好docker环境的linux系统,这个教程多如牛毛,在此不再赘述. 然后编写一个dockerfile来生成一个镜像,dockerfile其实就是一系列命令的集合,有点像windows的批 ...
- 创建Jenkins构建触发器,代码提交至gitLab即自动触发构建
下载所需插件,系统设置-->插件管理,搜索以下两个插件,选择安装 登录gitLab,生成一个Personal Access Tokens 进入Jenkins,添加api token,路径:首页- ...
- linux系统中利用vagrant创建虚拟开发环境
Vagrant简介 作为程序员,可能需要同时开发多个项目,使用多种编程语言,需要使用各种操作系统,如果将很多东西放在同一个电脑上,肯定会被各种配置环境搞晕.一个比较好的办法就是每个项目都有一个干净的开 ...
- Jenkins构建时报错:No Space left on device
Jenkins在自动化构建服务的同时也在消耗服务器的磁盘空间,如果构建的项目个数很多,而Jenkins 服务器磁盘空间又不是非常大的话,每隔一段时间磁盘空间就会爆满导致,就会出现磁盘空间不足无法构建的 ...
- [原]项目进阶 之 持续构建环境搭建(四)Jenkins环境搭建
在之前的几篇文章中,我给大家分别介绍了这次的持续化构建环境搭建的相关前提内容.如果说前面的文章都是小菜的话,那么今天的这篇文章就是我们这个系列文章的主菜. 1.前提 安装jenkins需要安装JDK. ...
- 使用 Vagrant + VirtualBox 快速构建 CentOS 下的 Docker 环境
Vagrant - 基础概念: Vagrant 是什么? Vagrant是一款用于在单个工作流程中构建和管理虚拟机环境的工具.凭借易于使用的工作流程和专注于自动化,Vagrant降低了开发环境设置时间 ...
- Docker DevOps实战:Docker+Jenkins+Python+Pytest+Allure(1)- 创建Jenkins容器、安装Python环境、安装项目依赖类库、安装Allure报告插件
前言: 本文实操笔记参照菠萝笔记,安装过程中的坑大家可以参考下 创建Jenkins容器 # 下载Jenkins镜像 [root@localhost ~]# docker pull jenkins/je ...
- Docker 搭建 Jenkins 持续集成自动化构建环境
1.Docker镜像拉取 Jenkins 环境命令 docker pull jenkins/jenkins:lts 查看下拉取的镜像 docker images 2.通过容器编排方式构建 Jenkin ...
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...
随机推荐
- Ring0隐藏进程的方法
第一种在系统调用服务表HOOK ZwQuerySystemInformation函数地址 使用InterlockedExchange函数将ZwQuerySystemInformation在内核导出表K ...
- maven 本地仓库和远程仓库
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...
- java异常处理
try{}catch(){}中的代码与外部代码之间有一定的逻辑关系,需要考虑到如果抛出异常的情况下,外部代码是否可以执行. 在需要捕获异常前尽量不要代入非异常代码,捕获后相关的代码放在一起.
- XMPP iOS客户端实现二:xcode项目配置
1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4. ...
- HTML5- Canvas入门(三)
前两章我们掌握了线段.矩形和多边形的绘制方法,今天我们主要是学习如何绘制圆弧和贝塞尔曲线. 圆弧的绘制 圆弧可以理解为一个圆上的某部分线段,在canvas中,绘制一条圆弧的语法如下: ctx.arc( ...
- node如何让一个端口同时支持https与http
众所周知node是一个高性能的web服务器,使用它可以很简单的创建一个http或https的服务器. 比如一个很简单的http服务器: var http = require('http'); var ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- C#设计模式之职责链
Iron之职责链 需求: "Iron"的建造一直没有停止,现在单个部件是有的,但是在部件从工厂里出来的时候,在组装到一起之前,我们还是非常有必要对部件进行质量检测,或者是其它个方面 ...
- windows命令——explorer
转至http://www.cnblogs.com/ymind/archive/2012/03/30/explorer-command-args.html 今天才知道,explorer原来可以这样用, ...
- 不知道张(zhāng)雱(pāng)是谁?你out了!
张(zhāng)雱(pāng)是谁?也许你已经听说过了,也许你还没听说过呢,不过你一定听说过老刘——刘强东,没错,这二人是有关系的,什么关系,京东是老刘的,而张雱呢?张雱是京东旗下52家关联公司法人代 ...