65.9K
CodeProject 正在变化。 阅读更多。
Home

以自动化方式为您的团队设置和配置 Jenkins

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (3投票s)

2015年11月16日

MIT

7分钟阅读

viewsIcon

34786

downloadIcon

318

提供使用 Ansible 自动配置构建服务器的方法。

背景

如今,持续集成是敏捷软件开发生命周期中的重要组成部分。市面上有许多工具:Atlassian Bamboo、Jenkins、Jetbrains TeamCity。在我看来,Jenkins 拥有最理想的产品社区和一套真正有用的插件,适合您的大部分软件项目:您可以构建软件、部署软件,
将网站、门户部署到各种地方,包括 AWS、DigitalOcean、裸机服务器或运行单元测试。它可以与您选择的通信工具集成,如 Slack、HipChat 或电子邮件。

如果您以前没有机会尝试过 Jenkins,请随时使用下面的教程开始。

手动安装

为了安装 Jenkins,我们需要

  • 一个 Unix 系统。我推荐基于 Debian 的系统,如 Ubuntu Server LTS
  • 安装 Java 运行时环境。我通常使用 Java 8
  • 获取基础 Jenkins 设置
  • 安装必要的插件
  • 将其部署在 Web 服务器后面。

安装 Java

安装 Java 最简单的方法是使用 apt-get 包管理器

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

添加上述 PPA 后,您可以使用以下命令安装 Java

sudo apt-get install oracle-java8-installer

获取基础 Jenkins 设置

您需要执行一系列命令,即:添加 Jenkins 签名密钥、注册 Jenkins apt 源、更新包列表,以及安装 Jenkins 包。

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins

默认情况下,它将安装基础 Jenkins 设置,这是不安全的。您需要访问安装 Jenkins 的主机,例如:http://jenkins-host:8080/。导航到“管理 Jenkins”(在左侧),然后在加载的页面上选择“配置全局安全”项。启用安全

现在向下看“基于 Matrix 的安全”(如果之前未选中,请选中它),并确保“匿名用户”在“视图”组下只有“读取”权限。点击页面底部的“保存”。页面加载后,您将看到一个登录表单,只需忽略它,然后转到主页(例如:http://jenkins-host:8080/)。您将看到此注册表单,第一个注册的帐户将是管理员。

插件的威力。

没有插件,Jenkins 就不会如此强大。我通常默认安装以下插件

插件使用“管理 Jenkins”部分中的插件管理器进行安装。插件管理器

将其部署在 Web 服务器后面

我通常将 Jenkins 隐藏在 Nginx 后面。典型的配置如下所示

server {
  listen 443 ssl;
  server_name jenkins.vagrant.dev;

  ssl_certificate /etc/nginx/jenkins_selfsigned.crt;
  ssl_certificate_key /etc/nginx/jenkins_selfsigned.key;

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;

    proxy_connect_timeout 150;
    proxy_send_timeout 100;
    proxy_read_timeout 100;
  }
  ...
}

自动化安装

我每次都手动安装 Jenkins 吗?当然不是,我经常为我的客户这样做。使用 Ansible 和 sa-box-jenkins 角色,您可以在喝咖啡的时间内部署新的 Jenkins 安装。

让我们准备一个基本的引导项目,供您将来使用。它包含以下文件

  • bootstrap.sh - 安装 Ansible 以及依赖项。
  • init.sh - 初始化第三方依赖项
  • .projmodules - 完全兼容 .gitmodules Git 语法,指定了 playbook 将使用的依赖项列表。特别是,它包含 Ansible - 默认情况下 developer_recipes(包含一组方便的部署配方)和一个名为 sa-box-bootstrap 的 Ansible 角色,负责框安全步骤(假设您计划将 Jenkins 放在远程主机上)。
[submodule "public/ansible_developer_recipes"]
    path = public/ansible_developer_recipes
    url = git@github.com:Voronenko/ansible-developer_recipes.git
[submodule "roles/sa-box-bootstrap"]
        path = roles/sa-box-bootstrap
        url = git@github.com:softasap/sa-box-bootstrap.git
[submodule "roles/sa-box-jenkins"]
        path = roles/sa-box-jenkins
        url = git@github.com:softasap/sa-box-jenkins.git

- *hosts* - 在此处列出提供给您服务器的初始框凭据。注意:jenkins-bootstrap 假定您拥有只有 root 访问权限的全新框。如果您的框已安全,请相应地调整凭据

[jenkins-bootstrap]
jenkins_bootstrap ansible_ssh_host=192.168.0.17 ansible_ssh_user=yourrootuser ansible_ssh_pass=yourpassword
[jenkins]
jenkins ansible_ssh_host=192.168.0.17 ansible_ssh_user=jenkins
  • jenkins_vars.yml - 在此处设置特定的环境覆盖,例如您喜欢的部署用户名和密钥。
  • jenkins_bootstrap.yml - 第一步 - 框安全。创建 jenkins 用户,并使用 sa-box-bootstrap 角色保护框。有关 sa-box-bootstrap 角色的更多详细信息。为了覆盖 sa-box-bootstrap 的参数 - 像下面的示例一样传递参数。
- hosts: all

  vars_files:
    - ./jenkins_vars.yml
  roles:
     - {
         role: "sa-box-bootstrap",
         root_dir: "{{playbook_dir}}/public/ansible_developer_recipes",
         deploy_user: "{{jenkins_user}}",
         deploy_user_keys: "{{jenkins_authorized_keys}}"
       }

- *jenkins.yml* - 配置 Jenkins 的插件和用户的置备脚本。 - *jenkins_vars.yml* - Jenkins 部署的配置选项。 - *setup_jenkins.sh* - 调用分两步部署的 shell 脚本:初始框引导和 Jenkins 设置

#!/bin/sh

ansible-playbook jenkins_bootstrap.yml --limit jenkins_bootstrap
ansible-playbook jenkins.yml --limit jenkins

自动化安装的配置选项

您需要覆盖

  • jenkins_authorized_keys(这是允许您使用 jenkins 用户登录 Jenkins 框的密钥列表)
  • jenkins_domain - 您的代理域
  • jenkins_host - jenkins 主机的名称(站点将绑定到 jenkins_host.jenkins_domain)
  • java_version - 您的 Java 选择(支持 6、7、8)
jenkins_user: jenkins
jenkins_authorized_keys:
  - "{{playbook_dir}}/components/files/ssh/vyacheslav.pub"

jenkins_domain: "vagrant.dev"
jenkins_host: "jenkins"

java_version: 8

-jenkins_users - 要创建的用户及其密码列表。Admin 和 deploy 是必需的用户。Admin 用于管理实例,deploy 用于通过部署脚本访问构件。如果您不覆盖密码,将使用默认密码(按角色),这对于公共部署来说不是最佳选择。

jenkins_users:
  - {
    name: "Admin",
    password: "AAAdmin",
    email: "no-reply@localhost"
    }
  - {
    name: "deploy",
    password: "DeDeDeDeploy",
    email: "no-reply@localhost"
    }
  • jenkins_plugins - 您选择要安装的插件。默认情况下
jenkins_plugins:
  - bitbucket # https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin
  - bitbucket-pullrequest-builder
  - build-pipeline-plugin
  - copyartifact # https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin
  - credentials # https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin
  - delivery-pipeline-plugin # https://wiki.jenkins-ci.org/display/JENKINS/Delivery+Pipeline+Plugin
  - environment-script # https://wiki.jenkins-ci.org/display/JENKINS/Environment+Script+Plugin
  - git
  - ghprb # https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
  - greenballs # https://wiki.jenkins-ci.org/display/JENKINS/Green+Balls
  - hipchat # https://wiki.jenkins-ci.org/display/JENKINS/HipChat+Plugin
  - junit # https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Plugin
  - matrix-auth # https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Authorization+Strategy+Plugin
  - matrix-project #https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Project+Plugin
  - parameterized-trigger #https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin
  - rebuild # https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Plugin
  - ssh
  - s3 # https://wiki.jenkins-ci.org/display/JENKINS/S3+Plugin
  - throttle-concurrents #https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin

代码实战

代码可以从仓库下载https://github.com/Voronenko/devops-jenkins-box-template。要使用它 - Fork 它,根据您的需求调整参数,然后使用。

运行就像

./bootstrap.sh
./init.sh
./setup_jenkins.sh

欢迎来到持续集成和部署的世界。

© . All rights reserved.