YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

总结:Devops

一、开发/运维环境准备

1. 安装HomeBrew

安装方法:HomeBrew官网,打开终端窗口,粘贴以下脚本,
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2. 通过HomeBrew安装工作中需要的软件

  1. Git
    • brew install git
  2. Java
    • Java网站下载jre-8u65-macosx-x64.dmg文件;
    • 双击 .dmg 文件以启动它;
    • 双击程序包图标以启动安装向导。
  3. Maven

    • Maven网站下载Maven,并解压到某个目录;
    • 打开Terminal,进入到$ vi ~/.bash_profile,设置Maven ClassPath;

      1
      2
      3
      export M2_HOME=/Users/robbie/apache-maven-3.3.3
      export PATH=$PATH:$M2_HOME/bin
      export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_11,jdk/Contents/Home
    • 重启bash_profile,使配置生效,$ source ~/.bash_profile

    • 输入mvn -v查看Maven是否安装成功。
  4. Gradle

    • Gradle网站下载Gradle,并解压到某个目录mv Downloads/gradle-2.14.1 /usr/local
    • 打开Terminal,进入到$ vi ~/.bash_profile,设置Gradle ClassPath;

      1
      2
      3
      GRADLE_HOME=/usr/local/gradle-2.14.1;
      export GRADLE_HOME
      export PATH=$PATH:$GRADLE_HOME/bin
    • 重启bash_profile,使配置生效,$ source ~/.bash_profile

    • 输入gradle -version查看Maven是否安装成功。
  5. Ansible
    • brew install ansible
  6. Ant

    • Ant网站下载Ant(apache-ant-1.9.7-bin.zip),并解压到某个目录mv Downloads/apache-ant-1.9.7 /usr/local
    • 打开Terminal,进入到$ vi ~/.bash_profile,设置Gradle ClassPath;

      1
      2
      export ANT_HOME=/usr/local/apache-ant-1.9.3
      export PATH=${PATH}:${ANT_HOME}/bin
    • 重启bash_profile,使配置生效,$ source ~/.bash_profile

    • 输入ant -version查看Ant是否安装成功。
  7. Ruby
    • brew update
    • brew install ruby
    • ruby --version
  8. Rails
    • gem install rails
  9. Python
    • brew install python

3. 配置相关环境变量(~/.bashrc)

4. 安装Virtual Box虚拟机工具

Virtual Box网站,直接下载安装Virtual Box。


二、安装和配置第一台虚拟机

1. 下载Ubuntu 14.04 的ISO镜像

Ubuntu14.04 Desktop版
Ubuntu14.04 Server版

2. 使用VirtualBox安装一个ubuntu 14.04的虚拟机

虚拟机的配置是1核1G内存50G磁盘空间
  • 打开 Virtual Box,点击 New 创建新的box;
  • 输入 Name,选择 Type,点击 Next;
  • Memory size 通常选择 1024MB,点击Next;
  • Hard disk 页面选择 Create a Virtual hard disk now,点击Next;
  • Hard disk file type 选择 VDI(VirtualBox Disk Image),点击Next;
  • Storage on physical hard disk 页面选择 Dynamically allocated,点击Next;
  • File location and size 页面选择 50GB,点击Create;
  • 运行新建的虚拟机,打开下载的镜像;
  • 选择语言,建议 English;
  • 开启安装模式,选择 Install Ubuntu Server;
  • 进入Ubuntu Server的安装程序后,还要再选择一次语言,建议选择 English;
  • 选择服务器的位置;
  • 设定系统使用的语言,建议选择 United States - en_US.UTF-8;
  • 设定键盘,使用手动设定,选择 English(US);
  • 设定网卡;
  • 设置主机名,使用者名,使用者账号和密码;
  • 选择是否需要加密目录,看情况选择是否加密;
  • 设置时区,通常Ubuntu Server会自动选择时区;
  • 设置硬盘,建议使用 LVM(Logical Volume Manager),方便以后扩充;
  • 设置自动更新,为了保持系统稳定,通常手动更新,选择 No automatic update;
  • 安装openSSH server、GRUB管理器;
  • 重新开机即可!
本地可以通过 2222 端口通过SSH远程访问

进入虚拟机,输入sudo vim /etc/ssh/sshd_config,将端口号改为2222即可。

PS:更新Ubuntu Server到最新的版本sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

3. 虚拟机网络配置

使用静态ip配置虚拟机的网络

设置IP地址、子网掩码、网关:sudo vim /etc/network/interfaces,重启文件sudo /etc/init.d/networking restart

  1. 动态IP地址:

    1
    2
    auto eth0
    iface eth0 inet dhcp
  2. 静态IP地址:

    1
    2
    3
    4
    5
    6
    7
    auto eth0
    iface eth0 inet static
    address 192.168.56.100 //地址
    netmask 255.255.255.0 //子网掩码
    network 192.168.56.0 //
    boardcast 192.168.56.255 //广播地址

    PS: 关闭网卡sudo ifconfig eth0 down
    打开网卡sudo ifconfig eth0 up
    重启sudo /etc/init.d/networking restart

设置虚拟机的DNS为114.114.114.114

sudo vim /etc/resolv.conf

4. 配置免密码ssh登录

  • 在虚拟机上生成公钥和私钥,输入ssh-keygen
  • 编辑虚拟机ssh配置,开启ssh,vim /etc/ssh/sshd_config

    1
    2
    3
    4
    取消这三行的注释
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
  • 重启ssh服务,service sshd restart

  • 验证ssh服务,netstat -tlnp | grep ssh
  • 新增ssh认证文件,保存其他主机的公钥,vim /root/.ssh/authorized_keys,把MAC上的id_rsa.pub复制在这个文件里;
  • Mac下输入ssh sakura@192.128.56.100就可以进入虚拟机。

三、Ansible使用

1. 使用ansible

“Ansible is Simple IT Automation”——简单的自动化IT工具。它可以让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。就是批量的在远程服务器上执行命令。最主要的是它是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

Ansilbe通过SSH协议进行管理节点和远程节点之间的通信。理论上说管理员通过ssh到一台远程主机上能做的操作Ansible都可以做。

安装:

* `$ sudo pip install ansible`
  `升级 $ pip install –upgrade ansible`
* `$ git clone git://github.com/ansible/ansible.git`
   `$ cd ansible && sudo make&&make install`

Ansible工作机制:

  • Ansible:核心;
  • Modules:包括Ansible自带的核心模块及自定义模块;
  • Plugins:完成模块功能的补充,包括连接插件、邮件插件等;
  • Playbooks:定义Ansible多任务配置文件,有Ansible自动执行;
  • Inventory:定义Ansible管理主机的清单。

    配置免密钥登陆
    为了避免Ansible下发指令时输入目标主机密码,通过证书签名达到SSH无密码登录,使用ssh-keygen与ssh-copy-id来实现快速证书的生成和公钥下发,其中ssh-keygen生成一对密钥,使用ssh-copy-id来下发生成的公钥。具体操作如下:
    ssh-keygen -t rsa -P ''
    ssh-copy-id -i .ssh/id_rsa.pub deploy@192.168.1.100
    ssh-copy-id -i .ssh/id_rsa.pub deploy@192.168.1.101

2. playbook解析

playbook 是一个不同于使用Ansible命令行执行方式的模式。简单来说,playbook是一个非常简单的配置管理系统,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。

Playbook组成

  • Target section,定义将要执行的playbook的远程主机组;
  • Variable section,定义playbook运行时需要使用的变量;
  • Task section,定义将要在远程主机上执行的任务列表;
  • Handler section,定义task执行完成以后需要调用的任务。

运行Playbook

  • 查看模块执行成功与否的详细信息,$ ansible-playbook playbook.yml –v
  • 查看一个 playbook 中都会对哪些主机产生影响,$ ansible-playbook playbook.yml –list-hosts
  • 查看都有哪些任务要执行,$ ansible-playbook playbook.yml –list-tasks

3. 主机清单Hosts

Ansible通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务,默认路径可以通过修改ansible.cfg的hostfile参数指定路径。

/etc/ansible/hosts主机清单配置格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[dbservers] //[]表示主机的分组名,可以按照功能、系统等进行分类,便于对某些主机或者某一组功能相同的主机进行操作
192.168.1.12
one.example.com
badwolf.example.com:5309 //支持指定 SSH 端口 5309
jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50 //设置主机别名为jumper
www[01:50].example.com //支持通配符匹配 www01 www02 … www50
[databases]
db-[a:f].example.com //支持字母匹配 a b c … f
[sakura] //为某主机指定连接类型和连接用户
Localhost ansible_connection=local
other1.example.com ansible_connection=ssh ansible_ssh_user=deploy
other2.example.com ansible_connection=ssh ansible_ssh_user=deploy
//hosts文件指令
ansible_ssh_host //指定主机别名对应的真实 IP,如:100 ansible_ssh_host=192.168.1.100,随后连接该主机无须指定完整 IP,只需指定 251 就行
ansible_ssh_port //指定连接到这个主机的 ssh 端口,默认 22
ansible_ssh_user //连接到该主机的 ssh 用户
ansible_ssh_pass //连接到该主机的 ssh 密码(连-k 选项都省了),安全考虑还是建议使用私钥或在命令行指定-k 选项输入
ansible_sudo_pass //sudo 密码
ansible_sudo_exe //sudo 命令路径
ansible_connection //连接类型,可以是 local、ssh 或 paramiko,ansible1.2 之前默认为 paramiko
ansible_ssh_private_key_file //私钥文件路径
ansible_shell_type //目标系统的 shell 类型,默认为 sh,如果设置 csh/fish,那么命令需要遵循它们语法
ansible_python_interpreter //python 解释器路径,默认是/usr/bin/python,但是如要要连*BSD系统的话,就需要该指令修改 python 路径
ansible_*_interpreter //这里的"*"可以是 ruby 或 perl 或其他语言的解释器,作用和 ansible_python_interpreter 类似

4. ansible常用模块

  • shell模块
    默认情况下,ansible使用的module是command,这个模块不支持shell变量和管道,若想使用shell来执行模块,使用-m参数指定shell模块,但是值得注意的是普通的命令执行模块是通过python的ssh执行。
    使用shell模块在远程主机上执行命令:$ ansible web -m shell -a ‘echo $TERM’

  • raw模块
    Raw也是命令执行模块,而raw模块则是直接用ssh模块进行执行,通常用在客户机还没有python的环境的时候。
    使用raw模块在远程主机上执行命令:$ansible web -m raw -a ‘echo $TERM’

  • copy模块
    实现主控端向目标主机拷贝文件,类似于scp的功能。
    拷贝本地的/etc/hosts文件到web主机组所有主机的/tmp/hosts(空目录除外),$ ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"

  • file模块
    file模块称之为文件属性模块,可以做的操作如下:

    • 使用 file 模块创建文件
      $ ansible web -m file -a "dest=/tmp/zhao/a.txt state=touch"
    • file 模块允许更改文件的用户及权限
      $ ansible web -m file -a "dest=/tmp/zhao/a.txt mode=600"
      $ ansible web -m file -a "dest=/tmp/zhao/b.txt mode=600 owner=deploy group=root"
    • 使用 file 模块创建目录,类似 mkdir -p
      $ ansible web -m file -a "dest=/tmp/yong mode=755 owner=deploy group=sa state=directory"
    • 使用 file 模块删除文件或者目录
      $ ansible web -m file -a "dest=/tmp/yong state=absent"
  • template模块
    template使用了Jinjia2格式作为文件模板,进行文档内变量的替换的模块。每次使用都会被ansible标记为changed状态。

  • stat模块
    获取远程文件状态信息,包含atime、ctime、mtime、md5、uid、gid等。
    $ ansible web -m stat -a "path=/tmp/zhao/a.txt"

  • 管理软件模块
    apt、yum模块分别用于管理ubuntu系列和redhat系列系统软件包。Ansible支持很多操作系统的软件包管理,使用时 -m 指定相应的软件包管理工具模块。如果没有这样的模块,可以自己定义类似的模块或者使用command模块来安装软件包。

    • 安装nginx软件包
      $ ansible web -m yum -a "name=nginx state=present"
      $ ansible web -m apt -a "name=nginx state=present"
    • 安装包到一个特定的版本
      $ ansible web -m yum -a "name=nginx-1.6.2 state=present"
      $ ansible web -m apt -a "name=nginx-1.6.2 state=present"
    • 指定某个源仓库安装某软件包
      $ ansible web -m yum -a "name=php55w enablerepo= remi state=present"
    • 更新一个软件包是最新版本
      $ ansible web -m yum -a "name=nginx state=latest"
      $ ansible web -m apt -a "name=nginx state=latest"
    • 卸载一个软件
      $ ansible web -m yum -a "name=nginx state=absent"
      $ ansible web –m apt -a "name=nginx state=absent"
  • user模块
    使用user模块对于创建新用户和更改、删除已存在用户非常方便。

    • 创建一个用户sakura并更新密码(密码必须为加密过的字符串)
      $ ansible all -m user -a "name=sakura password=$6$YyF5qLN8$edF1l.d/xcd9kv4ZQD/VVq5g2Uavlwoo/l.W4YVIQgsNghN4CbJKSEdZ5ihxztkYJ.bZV2PCP6MnGOioSLqUK."
    • 删除用户sakura
      $ ansible all -m user -a "name=zhao state=absent"
  • service模块

    • 启动web组所有主机的httpd服务
      $ ansible web -m service -a "name=httpd state=started"
    • 重启web组所有主机的httpd服务
      $ ansible web -m service -a "name=httpd state=restarted"
    • 关闭web组所有主机的httpd服务
      $ ansible web -m service -a "name=httpd state=stopped"

四、Vagrant使用

1. 使用HomeBrew安装Vagrant

直接使用brew install vagrantVagrant官网

2. 使用Vagrant创建一个Ubuntu14.04的虚拟机

  • 专门建立一个文件夹存放Vagrant project,在mkdir ~/Vagrant
  • 进入到这个文件夹cd Vagrant,输入vagrant box add [name/version],虚拟机的版本可以在版本网站选择;
  • 下载完成后进入到虚拟机,使用vagrant initvagrant upvagrant sshlogout的命令初始化,启动,进入以及登出,如果想要完全移除一个vagrant box,使用vagrant box remove命令。

    Vagrant常用命令

  • vagrant box add “boxName” remoteURL/localFile 添加box
  • vagrant init “boxName” 初始化box
  • vagrant up 启动虚拟机
  • vagrant ssh 登录虚拟机
  • vagrant box list 显示当前已添加的box列表
  • vagrant box remove “boxIdentity” 删除box
  • vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源
  • vagrant halt 关闭虚拟机
  • vagrant package 打包当前运行的虚拟机的环境
  • vagrant plugin 用于安装卸载插件
  • vagrant reload 重启虚拟机,主要用于重新载入配置文件
  • vagrant suspend 挂起虚拟机
  • vagrant resume 恢复挂起状态
  • vagrant ssh-config 输出ssh连接信息
  • vagrant status 输出当前虚拟机的状态
VagrantFile配置

VagrantFile里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。

  • 配置版本
    Vagrant.configure("2") do |config| end
  • box设置
    config.vm.box = "base"
    Vagrant要去启用哪个box作为系统,也就是上面我们输入vagrant init Box名称时所指定的box,如果没有输入box名称,那么默认就是base。

    config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"] end
    调用VBoxManage的modifyvm的命令,设置VM的名称为astaxie,内存为512MB。

  • 网络设置
    Vagrant有两种方式来进行网络连接:
    • host-only(主机模式),意思是主机和虚拟机之间的网络互访,而不是虚拟机访问internet的技术。
    • Bridge(桥接模式),该模式下的VM就像是局域网中的一台独立的主机,也就是说需要VM到你的路由器要IP,这样的话局域网里面其他机器就可以访问它了。
  • hostname设置
    config.vm.hostname = "go-app"
    设置hostname非常重要,因为当我们有很多台虚拟服务器的时候,都是依靠hostname來做识别的。
  • 同步目录
    config.vm.synced_folder "/Users/astaxie/data", "/vagrant_data"
    /vagrant目录默认就是当前的开发目录,它在虚拟机开启的时候默认挂载同步的。第一个参数是主机的目录,第二个参数是虚拟机挂载的目录。
  • 端口转发
    config.vm.network :forwarded_port, guest: 80, host: 8080
    把对host机器上8080端口的访问请求forward到虚拟机的80端口的服务上,例如你在你的虚拟机上使用nginx跑了一个Go应用,那么你在host机器上的浏览器中打开http://localhost:8080时,Vagrant就会把这个请求转发到VM里面跑在80端口的nginx服务上。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Vagrant.configure(2) do |config|
    # 设置虚拟机的Box
    config.vm.box = "ubuntu/trusty64"
    # 设置虚拟机的主机名
    config.vm.hostname="ubuntu"
    # 设置虚拟机的IP
    config.vm.network "private_network", ip: "192.168.56.100"
    # 设置主机与虚拟机的共享目录
    config.vm.synced_folder "~/Desktop/share", "/home/vagrant/share"
    # VirtaulBox相关配置
    config.vm.provider "virtualbox" do |v|
    # 设置虚拟机的名称
    v.name = "ubuntu"
    # 设置虚拟机的内存大小
    v.memory = 2048
    # 设置虚拟机的CPU个数
    v.cpus = 1
    end
    # 使用shell脚本进行软件安装和配置
    config.vm.provision "shell", inline: <<-SHELL
    # 安装Docker 1.11.0
    apt-get update
    apt-get install apt-transport-https ca-certificates
    apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list
    apt-get update;
    apt-get install -y -q docker-engine=1.11.0-0~trusty
    usermod -aG docker vagrant
    SHELL
    end

    修改完Vagrantfile的配置后,记得要用vagrant reload命令来重启VM之后才能使用VM更新后的配置

VagrantFile配置网络

想要让虚拟机作为一台服务器,就需要让主机与虚拟机之间通过网络连接在一起,配置虚拟机的网络的设置,就可以让主机可以访问到虚拟机。可以通过 VagrantFile 去配置虚拟机的网络,Vagrant 提供了三种方法:端口转发公有网络私有网络

  • 端口转发
    forwarded_port,就是你可以设置主机与虚拟机之间的端口的映射关系,这样请求主机上的这个端口,就会把请求转发到虚拟机上的对应的端口上。
    打开VagrantFile文件,取消config.vm.network "forwarded_port", guest: 80, host: 8080的注释。
    意思:config.vm.network是 vm 的 network 网络配置是 forwarded_port,要转发到虚拟机(guest)上的端口是 80,转发的是主机(host)上的 8080 端口。
    保存这个文件,然后启动或者重启虚拟机,这样配置才会生效。
  • 公有网络/桥接网络
    如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP服务器自动分配IP,在Vagrantfile中配置:
    Vagrant.configure("2") do |config| config.vm.network :public_network end
  • 私有网络
    允许多个虚拟机通过主机通过网络互相通信,vagrant允许用户分配一个静态IP,然后使用私有网络设置。
    Vagrant.configure("2") do |config| config.vm.network :private_network, ip: "192.168.50.4" end
通过vagrant ssh远程管理登录并操作虚拟机

使用vagrant ssh命令登陆虚拟机必须切换到VagrantFile所在的目录,而直接使用虚拟机IP登陆虚拟机则更为方便:
ssh vagrant@192.168.56.100
此时SSH登陆需要输入虚拟机vagrant用户的密码,即vagrant
将主机的公钥复制到虚拟机的authorized_keys文件中即可实现SSH无密码登陆:
cat $HOME/.ssh/id_rsa.pub | ssh vagrant@127.0.0.1 -p 2222 'cat >> $HOME/.ssh/authorized_keys'
其中,2222是主机SSH登陆虚拟机的转发端口,可以通过以下命令查看:
vagrant ssh-config | grep Port
Port 2222
此时SSH登陆虚拟机则不再需要输入密码。

3. 使用Vagrant创建一组虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Vagrant.configure("2") do |config|
config.vm.define :ansible do |ansible|
ansible.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "ansible", "--memory", "2048"]
end
ansible.vm.box = "ubuntu/trusty64"
ansible.vm.hostname = "ansible"
ansible.vm.network :private_network, ip: "192.168.33.100"
ansible.vm.provision :shell, path: "ansible.sh"
ansible.vm.provision "ansible_local" do |ansible|
ansible.inventory_path = "./hosts"
ansible.limit = "all"
ansible.playbook = "ansible.yml"
end
end
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "2048"]
end
web.vm.box = "ubuntu/trusty64"
web.vm.hostname = "web"
web.vm.network :private_network, ip: "192.168.33.201"
end
config.vm.define :db do |db|
db.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "db", "--memory", "2048"]
end
db.vm.box = "ubuntu/trusty64"
db.vm.hostname = "db"
db.vm.network :private_network, ip: "192.168.33.202"
end
end
`:web`和`:db`定义了两个VM,设置完后再使用`vagrant up`启动。可以通过`vagrant ssh web`和`vagrant ssh db`分别登录指定虚拟机上。 验证两台虚拟机间的通信: (验证方法: 在web虚拟机上通过ssh登录到db虚拟机)
1
2
3
vagrant ssh web
@web: ssh 192.168.33.202
@db:
VagrantFile里面定义机器数量
定义机器名、网络、cpu、内存等信息

4. 使用Vagrant的Provisioning功能执行一个shell脚本

1
2
3
4
5
6
7
8
9
10
config.vm.provision "shell", inline: <<-SHELL
dire="/opt/test/"
if [ -d "$dire" ]; then
rmdir "$dire"
mkdir "$dire"
else
mkdir "$dire"
fi
SHELL

Provision就是嵌入了一段Shell脚本进行软件的安装和配置,当然也可以安装其他所需要的软件。修改此段内容之后,重新创建虚拟机需要使用”–provision”选项。

1
2
vagrant halt
vagrant up --provider virtualbox --provision

5. 使用Vagrant的Provisioning功能执行一个ansible脚本

在一台虚拟机上安装gogs,jenkins

在VagrantFile同级路径下,创建ansible.shhostsansible.yml。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wget -qO - https://deb.packager.io/key | sudo apt-key add -
echo "deb https://deb.packager.io/gh/pkgr/gogs trusty pkgr" | sudo tee /etc/apt/sources.list.d/gogs.list
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
---
- hosts: ansible-yue
become_user: root
become: true
tasks:
- name: install gogs if it is not already installed
apt: name=gogs state=present
- name: install jenkins if it is not already installed
apt: name=jenkins state=present
[ansible-yue]
192.168.33.100 ansible_user=vagrant ansible_ssh_pass=vagrant

进入虚拟机ansible,打开网址192.168.33.100,3000端口是gogs,8080端口是Jenkins。账号密码分别为:admin1admin

五、Git使用

1.在gogs上创建一个git仓库,把本地一个空目录push到该仓库

步骤与github相同,只需要把虚拟机的ssh放到gogs的SSH Keys里。


六、Jenkins使用

1.编写相关ansible脚本,使用Vagrant的Provisioning功能执行一个脚本安装Jenkins

在一台虚拟机上安装Jenkins
Jenkins可以通过ip和端口在浏览器中访问

以上两个步骤参考4.5。

用安装好构建依赖的环境如gradle、git等

2.配置Jenkins

Jenkins相关功能
Jenkins常用插件

3.配置第一个构建任务

从gogs获取到上步使用的git仓库
该构建任务会每隔5分钟检查是否有代码提交
执行构建任务,编译并打包(war)
构建成功会有war包的产出物

参考链接