首頁 > 軟體

用Vagrant建立Jenkins構建環境

2020-06-16 16:53:11

這是一個關於Vagrant的學習系列,包含如下文章:

1.Vagrant基本使用入門 https://www.linuxidc.com/Linux/2018-04/151772.htm
2.建立自己的Vagrant box https://www.linuxidc.com/Linux/2018-04/151773.htm
3.用Vagrant搭建Jenkins構建環境 https://www.linuxidc.com/Linux/2018-04/151774.htm
4.用Vagrant和Ansible搭建持續交付平台 https://www.linuxidc.com/Linux/2018-04/151775.htm

在上一篇文章中,我們講到了如何建立自己的vagrant box。本文中,我們將使用Vagrant一次性建立3台虛擬機器以組成一個Jenkins的master-slave構建環境,其中包含1台Jenkins master機器,2台slave機器。我們將採用Shell作為provision工具,當然你也可以使用像Ansible、Chef等。

在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設定過程,請參考這裡 https://www.linuxidc.com/Linux/2015-03/114709.htm 。另外,為了使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搭建持續交付平台

本文原始碼可以到Linux公社資源站下載:

------------------------------------------分割線------------------------------------------

免費下載地址在 http://linux.linuxidc.com/

使用者名稱與密碼都是www.linuxidc.com

具體下載目錄在 /2018年資料/4月/8日/用Vagrant建立Jenkins構建環境/

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-04/151774.htm


IT145.com E-mail:sddin#qq.com