用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 ...
随机推荐
- 修改sql数据库文件 物理文件名称
-- 允许配置高级选项 EXEC sp_configure 'show advanced options', 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell ...
- C#_技巧:真伪随机数
使用 Random 产生随机数.(这是一种伪随机数,需要seed,同一个seed后,采用某种算法产生的数字序列都是一样的) 两种写法 错误 for(int i=0;i<100;i++) { ...
- PHP Strict Standards:问题解决
异常信息: ( ! ) Strict standards: Declaration of SugarEmailAddress::save() should be compatible with tha ...
- 初识ASP.NET Core 1.0
本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代AS ...
- Mycat 全局系列号
标签:utf8 概述 本篇文章介绍mycat怎样在分库分表的情况下保证主键的全局唯一方法,接下来就来分析三种方法各自的优缺点. 配置 文件方式获取 1.修改server配置文件 vim server. ...
- eclipse启动时报告错误:Java was started but returned exit code=-805306369
这两天也没改过eclipse和java的配置,但eclipse启动时报告错误:Java was started but returned exit code=-805306369 后来在eclipse ...
- Java 浅析三大特性之一多态
Java 浅析三大特性之一多态 之前我们的文章讲了Java的封装和继承,封装讲的时候,并没有体现出来封装的强大之处,反而还要慎用封装.因为这时的封装还没有和多态联系到一起,还无法看出向上转型的厉害之处 ...
- int and string
int转string一.#include <sstream> int n = 0; std::stringstream ss; std::string str; ss<<n; ...
- [译]AngularJS $apply, $digest, 和$evalAsync的比较
原文:The differences between AngularJS $apply, $digest, and $evalAsync 你是不是也常在想AngularJS $apply, $dige ...
- Mysql命令show global status求根溯源
近来,发现好多公司对mysql的性能监控是通过show global status实现的,因此对于这个命令想要探究一番,看他是否是实时更新的. 在此之前,我们必须搞明白mysql对于这个命令的执行过程 ...