阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

通过 Ansible 创建 Jenkins Server

444次阅读
没有评论

共计 4091 个字符,预计需要花费 11 分钟才能阅读完成。

创建 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 了:
http://localhost:8080/jenkins

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

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

通过 Ansible 创建 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”

jenkins_version: “1.644”
jenkins_pkg_url: “http://www.example.com”
这两个配置是可选的,通过 jenkins_version 变量我们可以指定安装的 Jenkins 版本,这样每次都会安装相同的版本,当然必须是出现在 http://pkg.jenkins-ci.org/debian/ (Ubuntu)中的版本。
如果你不想使用官方的包,可以通过 jenkins_pkg_url 指定自己的包。默认这两个选项是被注释掉的,也就是说会安装官方的包。

jenkins_connection_delay: 5
jenkins_connection_retries: 60
启动后连接到 Jenkins 时需要等待的时间和次数,以验证 Jenkins 是否正在运行。等待的总时间 = 延迟 * 重试,因此默认情况下,这个角色在超时前将等待 300 秒。

jenkins_init_changes:
  – option: “JENKINS_ARGS”
    value: “–prefix={{jenkins_url_prefix}}”
  – option: “JENKINS_JAVA_OPTIONS”
    value: “{{jenkins_java_options}}”
修改 Jenkings 的初始脚本,默认的更改设置了配置的 URL 前缀,并为 Jenkins 的启动添加了配置的 Java 选项。如果要为 Jenkins 的初始化脚本设置其他选项,添加其他的 选项 / 值 就可以了。

下面的配置与平台相关,所以 Ubuntu 相关的配置放在配置文件 ~/.ansible/roles/geerlingguy.jenkins/vars/Debian.yml 中:
# For Debian (role default):
__jenkins_repo_url: deb https://pkg.jenkins.io/debian binary/
__jenkins_repo_key_url: https://pkg.jenkins.io/debian/jenkins.io.key
默认安装的是 Jenkins 的最新版本,如果要安装稳定版本请设置为下面的配置:
# For Debian/Ubuntu LTS:
__jenkins_repo_url: deb http://pkg.jenkins-ci.org/debian-stable binary/
__jenkins_repo_key_url: http://pkg.jenkins-ci.org/debian-stable/jenkins-ci.org.key

先在目标机器上安装 curl

由于在安装 Jenkins 的时候需要用到 curl 工具,所以有必要先安装该工具。具体的做法我们可以写一个简单 playbook 来实现,把下面的内容保存到文件 pb_curl.yml 文件中:

---
- hosts: jenkinsservers
  become: true
  become_user: root
  tasks:
    - name: install curl on Ubuntu
      apt:
        name: curl
        state: 'latest'
        update_cache: no

然后在 /etc/ansible/hosts 文件中添加一个组 jenkinsservers 来保存目标主机:

[jenkinsservers]
192.168.21.145

最后执行命令在目标机器上安装 curl:

$ ansible-playbook -u nick pb_curl.yml

如果你还不熟悉 Ansible 及其 playbook,请参考笔者的《Ansible 简介》一文。

安装 Jenkins

下面我们创建一个非常简单的 playbook 文件 pb_jenkins.yml,其中引用已经安装好的 role 来完成 jenkins 的安装:

---
- hosts: jenkinsservers
  vars:
    jenkins_hostname: localhost
  roles:
    - role: geerlingguy.java
      become: yes
    - role: geerlingguy.jenkins
      become: yes

注意,playbook 中先配置了 geerlingguy.java 来安装 Jenkins 依赖的 java。
执行下面的命令进行安装:

$ ansible-playbook -u nick pb_jenkins.yml

安装成功后,到目标机器上检查一下:

通过 Ansible 创建 Jenkins Server

Jenkins 服务器已经可以正常运行了,但此时只能通过 localhost 在本机访问。如果需要在局域网内访问,在配置文件中把 localhost 换成主机的 IP 就可以了。
注意,Ansible 的命令是可以重复执行的,如果因为网络等原因造成的失败问题,可以调整相关的超时参数然后重新执行一遍就行了。

总结

对于自动化来说,其本质是件一直在路上的工作。明确目标,然后找对工具进行持续的改进。笔者认为  Ansible 就是这么一款值得信赖的自动化利器,并且它能够通过 playbook 和 role 等概念把我们的使用经验积淀下来进行分享。

参考:
Integrating Ansible with Jenkins in a CI/CD process
ansible-role-jenkins
galaxy role jenkins(geerlingguy)

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4091字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985903
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...