通过 Ansible 创建 Jenkins Server

创建 CI 流程的第一件事应该是安装 CI 工具,本文以最常见的 Jenkins 为例,介绍如何使用 Ansible 自动安装 Jenkins Server。说明:本文的演示环境为 Ubuntu 16.04。

Ansible roles(角色)

Ansible 中除了 playbook,还有更高层级的抽象,称为 role(角色)。所谓的 role 其实就是把一些 playbook 组织成为一个更简洁、清晰的可重用对象。比如把安装 Jenkins Server 的 playbook 组织成为一个 role。
感谢开源社区,当我们需要安装 Jenkins Server 的时候并不需要自己写一个对应的 role,直接使用大神们写好的就可以了。

Ansible Galaxy
Ansible Galaxy 是社区和分享 Ansible role 的地方。直接搜索 jenkins,由 geerlingguy 贡献的 jenkins role 是目前最受欢迎的:

通过 Ansible 创建 Jenkins Server

ansible-galaxy 命令
通过 ansible-galaxy 命令可以把上面搜索到的 role 安装到本地:

$ ansible-galaxy install geerlingguy.jenkins

由于 geerlingguy.jenkins role 依赖 geerlingguy.Java role,所以在安装 geerlingguy.jenkins role 的同时也安装了 geerlingguy.java role。默认的安装目录在当前用户家目录下的 .ansible/roles
同时会安装其依赖的 geerlingguy.java role(能够自行处理依赖关系):

通过 Ansible 创建 Jenkins Server

了解 jenkins role 的基本配置

我们安装的 geerlingguy.jenkins role 的主要配置文件为:~/.ansible/roles/geerlingguy.jenkins/defaults/main.yml。下面介绍一下其中的一些比较重要的配置项。
jenkins_package_state: present
安装的 jenkins 版本,present 表示仅安装系统默认包中的版本,如果需要最新版本的 jenkins,需要把 jenkins_package_state 设置为 latest。

jenkins_hostname: localhost
通过 http 协议访问 Jenkins 时使用的域名或主机名称,作为演示,设置为 localhost 就可以了。

jenkins_home: /var/lib/jenkins
Jenkins 的主目录。

jenkins_http_port: 8080
Jenkins 服务器监听的端口号。

jenkins_url_prefix: ""
如果不想通过域名或主机名称直接访问 Jenkins,可以设置 jenkins_url_prefix 变量。比如设置为 /jenkins,这样我们就需要通过下面的 URL 来访问 Jenkins server 了:
:8080/jenkins

jenkins_jar_location: /opt/jenkins-cli.jar
Jenkins CLI 程序的位置,该程序主要用来以命令行的方式与 Jenkins server 交互。

jenkins_plugins: []
指定在安装 Jenkins server 的同时安装的插件,默认是一个插件都不装的:

如果需要安装插件,使用逗号分隔插件名称并写入到中括号中就可以了,下面是一个小 demo:
[junit,greenballs,git]

jenkins_plugins_state: present
指定插件的版本,如果设置为 latest,就会保证所有的插件都是最新版本。

jenkins_plugin_timeout: 30
安装插件时的连接超时时间。需要注意安装插件时的超时问题,国内安装插件非常耗时,最好把 jenkins_plugin_timeout 设置的大些,不然经常会碰到 timeout 错误:

通过 Ansible 创建 Jenkins Server

jenkins_plugins_install_dependencies: true
安装插件时是否安装其所依赖的插件。

jenkins_admin_username: admin
jenkins_admin_password: admin
安装 Jenkins 时创建的管理员账号和密码。

jenkins_java_options: "-Djenkins.install.runSetupWizard=false"
可以通过 jenkins_java_options 来设置额外的 java 命令行参数。比如我们可以通过下面的配置来设置 Jenkings server 的时区为纽约:
jenkins_java_options: "-Dorg.apache.commons.jelly.tags.fmt.timeZone=America/New_York"

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0e5e44e0a55ea35fac58f18d62dbd708.html