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_url_external: ''
    • 用户访问 Jenkins 使用的外部 URL。此设置将在 Jenkins 配置中设置,并用于电子邮件、网络钩子等。
    • 如果留空或为 None,则不会设置配置,Jenkins 会尝试自动发现(如果被代理,这将无法正常工作)。
  • jenkins_admin_username: (未定义)
    • 如果定义了 jenkins_admin_usernamejenkins_admin_password 中的任何一个,两个都必须定义。
    • 重写此变量以指定应在每个可能的安全域中使用的 Jenkins 管理员凭据。
    • 如果未定义,角色将尝试使用匿名身份验证。
    • 请注意,角色将自动检测 Jenkins 是否设置为允许匿名身份验证(安装后即如此),并妥善处理。
  • jenkins_admin_password: (未定义)
    • 如果定义了 jenkins_admin_usernamejenkins_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_plugins_update: true
    • 如果为 true,则在运行此角色时将更新 Jenkins 插件。(注意,缺失的插件将始终被安装。)
  • jenkins_java_args_extra: ''
    • 将添加到 Jenkins 进程的 JAVA_ARGS 的额外选项,例如 JVM 内存设置,例如 -Xmx4g
  • jenkins_http_proxy_server, jenkins_http_proxy_port, jenkins_http_proxy_no_proxy_hosts: (均未定义)
    • 这些与 JVM 的 http.proxyHosthttp.proxyPorthttp.nonProxyHosts 系统属性具有相同功能,设置将用于 HTTP 和 HTTPS 请求。
    • 这些设置将用于配置:
      • Jenkins JVM 的 http.proxyHosthttp.proxyPorthttps.proxyHosthttps.proxyPorthttp.nonProxyHosts 系统属性,具体见 Java Networking and Proxies
      • Jenkins 特定的代理设置(某些插件需要,例如 GitHub 插件),见 JenkinsBehindProxy
      • jenkins_http_proxy_no_proxy_hosts 的值应为列表,例如 ['localhost', 'example.com']

依赖

此角色没有对其他 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/)。

关于项目

This Ansible role can be used to install and manage Jenkins 2.

安装
ansible-galaxy install karlmdavis.jenkins2
许可证
other
下载
888
拥有者