karlmdavis.jenkins2
Jenkins 2+ 的 Ansible 角色
这个 Ansible 角色可以用来安装和管理 Jenkins 2。
要求
此角色需要 Ansible 2.4 或更高版本,且系统中必须具备 Ansible 流水线或 setfacl
(参考 成为非特权用户)。
当前支持的操作系统为 Ubuntu 14.04(Trusty)和 Ubuntu 16.04(Xenial),欢迎对其他平台的支持做出贡献!
角色变量
此角色支持以下变量,默认值来自 defaults/main.yml:
jenkins_release_line
:'weekly'
- 当设置为
long_term_support
时,角色将安装 Jenkins 的 LTS 版本。 - 当设置为
weekly
时,角色将安装 Jenkins 的每周版本。
- 当设置为
jenkins_release_update
:true
- 如果设为
true
,在运行此角色时,Jenkins 包(YUM、APT 等)将升级到最新版本。
- 如果设为
jenkins_home
:/var/lib/jenkins
- Jenkins 数据存储的目录。
- 由于 Jenkins 安装程序的限制,
jenkins
服务账户仍将使用默认的主目录。这通常只在 SSH 密钥的使用中相关。
jenkins_port
:8080
- Jenkins 运行的端口,用于 HTTP 请求。
- 在大多数系统上,该值需要大于 1024,因为 Jenkins 不是以
root
身份运行。
jenkins_context_path
:''
- Jenkins 托管的上下文路径,例如
http://localhost:8080/foo
中的/foo
。留空''
以在根路径下托管。
- Jenkins 托管的上下文路径,例如
jenkins_url_external
:''
- 用户访问 Jenkins 使用的外部 URL。此设置将在 Jenkins 配置中设置,并用于电子邮件、网络钩子等。
- 如果留空或为 None,则不会设置配置,Jenkins 会尝试自动发现(如果被代理,这将无法正常工作)。
jenkins_admin_username
: (未定义)- 如果定义了
jenkins_admin_username
和jenkins_admin_password
中的任何一个,两个都必须定义。 - 重写此变量以指定应在每个可能的安全域中使用的 Jenkins 管理员凭据。
- 如果未定义,角色将尝试使用匿名身份验证。
- 请注意,角色将自动检测 Jenkins 是否设置为允许匿名身份验证(安装后即如此),并妥善处理。
- 如果定义了
jenkins_admin_password
: (未定义)- 如果定义了
jenkins_admin_username
和jenkins_admin_password
中的任何一个,两个都必须定义。 - 重写此变量以指定应在每个可能的安全域中使用的 Jenkins 管理员凭据。
- 如果定义了
jenkins_session_timeout
:30
- Jenkins 会话超时之前的分钟数,即登录有效的持续时间。
- 默认值为 30 分钟。
- 可以设置为
0
以避免超时。
jenkins_plugins_extra
:[]
- 重写此变量以安装额外的 Jenkins 插件。
- 这些将是 Jenkins 2 新设置向导推荐插件的附加插件,该向导会自动安装(见 defaults/main.yml 中的
jenkins_plugins_recommended
)。
jenkins_plugins_timeout
:60
- 插件安装/更新失败之前的时间(以秒为单位)。此值传递给
jenkins_plugin
模块中的超时参数。(详情见这里:http://docs.ansible.com/ansible/latest/jenkins_plugin_module.html#options。)
- 插件安装/更新失败之前的时间(以秒为单位)。此值传递给
jenkins_plugins_update
:true
- 如果为
true
,则在运行此角色时将更新 Jenkins 插件。(注意,缺失的插件将始终被安装。)
- 如果为
jenkins_java_args_extra
:''
- 将添加到 Jenkins 进程的
JAVA_ARGS
的额外选项,例如 JVM 内存设置,例如-Xmx4g
。
- 将添加到 Jenkins 进程的
jenkins_http_proxy_server
,jenkins_http_proxy_port
,jenkins_http_proxy_no_proxy_hosts
: (均未定义)- 这些与 JVM 的
http.proxyHost
、http.proxyPort
和http.nonProxyHosts
系统属性具有相同功能,设置将用于 HTTP 和 HTTPS 请求。 - 这些设置将用于配置:
- Jenkins JVM 的
http.proxyHost
、http.proxyPort
、https.proxyHost
、https.proxyPort
和http.nonProxyHosts
系统属性,具体见 Java Networking and Proxies。 - Jenkins 特定的代理设置(某些插件需要,例如 GitHub 插件),见 JenkinsBehindProxy。
jenkins_http_proxy_no_proxy_hosts
的值应为列表,例如['localhost', 'example.com']
。
- Jenkins JVM 的
- 这些与 JVM 的
依赖
此角色没有对其他 Ansible 角色的直接依赖。但系统路径中必须有 Java JRE。
示例剧本
可以通过以下方式安装此角色:
$ ansible-galaxy install karlmdavis.jenkins2
可以通过以下方式应用此角色:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
jenkins_plugins_extra:
- github-oauth
运行 Groovy 脚本以配置 Jenkins
安装 Jenkins 后,可以通过 Ansible 运行 Groovy 脚本以进一步自定义 Jenkins。
例如,以下是如何安装 Jenkins,然后配置 Jenkins 使用其 HudsonPrivateSecurityRealm
来支持本地 Jenkins 帐户:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# 第一次运行时不需要,但在之前的运行中需要(根据下文启用了安全性)。
jenkins_admin_username: test
jenkins_admin_password: supersecret
# 确保 Jenkins 已重启(如有必要)。
- meta: flush_handlers
# 配置安全性以使用 Jenkins 本地帐户。
- name: 配置安全性
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: |
// 这是 Jenkins 交互式脚本控制台自动包括的基本导入。
import jenkins.*;
import jenkins.model.*;
import hudson.*;
import hudson.model.*;
// 配置安全域,处理身份验证。
def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
Jenkins.instance.setSecurityRealm(securityRealm)
// 创建一个用户进行登录。确保该用户与系统本地 `jenkins` 用户的 SSH 密钥绑定,以确保该帐户可以使用 Jenkins 的 CLI。
def testUser = securityRealm.createAccount("test", "supersecret")
testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
testUser.save()
Jenkins.instance.save()
println "已更改身份验证。"
}
// 配置授权策略,指定谁可以做什么。
def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
authorizationStrategy.setAllowAnonymousRead(false)
Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
Jenkins.instance.save()
println "已更改授权。"
}
register: shell_jenkins_security
changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"
或者,Groovy 脚本可以存储为单独的文件,通过 lookup(...)
引入,如下所示:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# 第一次运行时不需要,但在之前的运行中需要(根据下文启用了安全性)。
jenkins_admin_username: test
jenkins_admin_password: supersecret
# 确保 Jenkins 已重启(如有必要)。
- meta: flush_handlers
# 配置安全性以使用 Jenkins 本地帐户。
- name: 配置安全性
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: "{{ lookup('template', 'templates/jenkins_security.groovy.j2') }}"
许可证
该项目在美国的公共领域中,全球对该工作的版权和相关权利通过 CC0 1.0 全球公共领域捐赠 被放弃。
对此项目的所有贡献将根据 CC0 执照发布。通过提交拉取请求,您同意遵守此版权利益放弃。
作者信息
该插件的作者是 Karl M. Davis (https://justdavis.com/karl/)。
安装
ansible-galaxy install karlmdavis.jenkins2
许可证
other
下载
888
拥有者