jenkins安装及使用

1.1 持续集成Continuous integration (CI)

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

1.2 前言

  • 维护一个单一的代码库
  • 使构建自动化
  • 执行测试是构建的一部分
  • 集成日志及历史记录
  • 使用统一的依赖包管理库
  • 每天至少集成一次

1.3 什么是jenkins

Jenkins is an automation engine with an unparalleled plugin ecosystem to support all of your favorite tools in your delivery pipelines, whether your goal is continuous integration, automated testing, or continuous delivery.

持续集成、自动测试、持续部署的超级引擎,支持自定义工具集、多种交付通道。

1.4 安装

安装依赖

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

YUM安装(不推荐)

安装yum源
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
or
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

安装Jenkins

启动的话,jenkins 2.60版本之后支持systemctl的使用,而之前的版本我暂时没看到支持的。都是使用service启动。

yum –y install jenkins
service jenkins start

RPM安装

下载地址

https://pkg.jenkins.io/redhat-stable/
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

RPM安装

rpm –ivh jenkins-2.32.3-1.1.noarch.rpm
service jenkins start
ckconfig Jenkins on

1.5页面

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
bc47caf27ba24145828a48024c52bf0b

选择建议安装插件。

通常得十来分钟。

插件默认路径是

cd /var/lib/jenkins/plugins/

输入用户名和密码

安装成功

安装jenkins卡启动,直接断网即可。jenkins尝试连接官网

jenkins

1.6 插件--目录:/var/lib/jenkins/plugins/

安装插件后需要重启服务

插件跟jenkins版本存在兼容性问题。

去官网下载插件。

    http://updates.jenkins-ci.org/

1.7 镜像管理

全部镜像

    http://mirrors.jenkins-ci.org/status.html

更换镜像

    http://updates.jenkins-ci.org/update-center.json

    https://mirrors.tuna.tsinghua.edu.cn/

    http://mirror.esuni.jp/jenkins/updates/update-center.json

    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 

1.8 配置文件

1.8.1 目录结构

/var/lib/jenkins 主目录

/etc/init.d/jenkins 启动文件

/var/cache/Jenkins 程序文件

/var/log/Jenkins 日志文件
[root@jenkins plugins]# rpm -ql jenkins
/etc/init.d/jenkins              # 启动文件 启动文件里的变量是去配置文件里拿的
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins           # 配置文件
/usr/lib/jenkins                 
/usr/lib/jenkins/jenkins.war     # war包存放位置
/usr/sbin/rcjenkins
/var/cache/jenkins               # 程序文件
/var/lib/jenkins                 # 工作目录  升级只要把war包放在这里即可
/var/log/jenkins                 # 日志文件
[root@jenkins ~]# grep -vE "^$|#" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"                     #  jenkins工作目录
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins"                              # Jenkins的启动用户
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"     # java的启动选项
JENKINS_PORT="8080"                                 # jenkins端口
JENKINS_LISTEN_ADDRESS=""                           # Jenkins监听端口
JENKINS_HTTPS_PORT=""                               # HTTPS 的指定端口
JENKINS_HTTPS_KEYSTORE=""                           # HTTPS 指定认证
JENKINS_HTTPS_KEYSTORE_PASSWORD=""                  # HTTPS 指定KEY文件
JENKINS_HTTPS_LISTEN_ADDRESS=""                     # HTTPS 指定监听地址
JENKINS_DEBUG_LEVEL="5"                             # 日志级别
JENKINS_ENABLE_ACCESS_LOG="no"                      # 不记录访问日志
JENKINS_HANDLER_MAX="100"                           # 最大的工作线程
JENKINS_HANDLER_IDLE="20"                           # idle工作的线程数
JENKINS_ARGS=""                                     # 启动参数

  

1.9 备份 备份/var/lib/jenkins/ 即可

主要备份就是jenkins的工作目录,程序目录就算啦。

tar zxvf jenknis.tar.gz /var/lib/jenkins/  # 每次全量,后期受不了
  
用rsync增量备份最好。                         #  增量也有缺点,各有舍取

1.10 创建第一个项目(项目)

构建自由风格的软件项目。 此处使用的是python代码

认证信息的话,可以是jenkins的公钥。密钥分发需要先记录主机  也就是免密登陆的yes。

还要注意权限。也可以使用账号密码进行使用。

构建完成后

点击构建就会自动拉取代码并执行shell命令。

1.11 maven(工作没用上,暂时没上)

maven主要是构建java用的项目,安装插件后可以创建对应的项目。

可以拉取代码并且自动编译,部署,重启tomcat。具体细节,往后有时间更新。

1.12 按版本发布

安装git parameter plugin插件

任务配置中勾选<参数化构建过程>

选择 git parameter

创建变量名release

选择发布类型:

  •    tag 按标签发布
  •    branch按分支分布
  •    Revision 按修订发布

 

Branched to build:换成 $release    (不然永远拉取都是最新的)

 

pipeline不能使用使用变量名。这个需要跟环境(目录名进行结合。)

1.13 远程管理

笔者使用的是saltstack,而且只是使用了shell 执行模块。

saltstack的github地址:https://github.com/AgoCan/MySalt

 saltstack需要注意的一点就是缓存和 工作空间的.git目录会有冲突,笔者建议,job构建后第一次直接删.git目录进行推送。

然后使用 mount --bind 工作空间目录  salt的files目录          这样就可以使两个目录相同了。不然salt笔者暂时没找到好的方案。

 

可以使用的方案有:

  • SSH
  • ansible
  • saltstack
  • saltstack 的API

1.14 代码推送,代码有点旧,新代码请看github上的代码。持续更新中。

mkdir files

mkdir files/dev

vi delete_three_ago_code.sh

# 删除三次以前的代码

#!/bin/sh
num=`ls -d /usr/local/nginx/html/luffy_dev*|wc -l`
if [ $num -gt 4 ];then
    ls -dt /usr/local/nginx/html/luffy_dev* | tail -1|xargs -i rm -r '{}'
fi 

mount --bind /var/lib/jenkins/workspace/dev/ /srv/salt/base/files/dev

# 推送之前需要需要把源文件给改名

change_code_name:
  cmd.run:
    - name: mv /usr/local/nginx/html/luffy_dev /usr/local/nginx/html/luffy_dev`date +%F-%H`
delete_and_push_code:
  cmd.script:
    - source: salt://files/push_code.sh
    - user: root
  file.recurse:
    - name: /usr/local/nginx/html/luffy_dev
    - source: salt://files/dev

 安装ssh plugin插件

类似于ansible的scripts的模块和saltstack的cmd.script模块

系统管理>SSH remote hosts 增加主机信息

 

在项目中选择execute shell scripts on remote host using ssh

类似于在本地写shell。跟ssh 直接执行没差。 使用salt即可。

制作jenkins主机免密登录

直接在 execute shell界面执行ssh命令

或在脚本中接调用ssh语句

    ssh root@192.168.47.175 “ifconfig”

    scp xxx root@192.168.47.175/xxx/

安装ansible

配置ansible hosts

配置ansible对其它机器的免密权限

执行ansible 命令

1.15 集群

创建节点

在Configure Global Security中开启TCP port for JNLP agents随机选取或指定端口

新建节点,系统设置里

节点名

执行器数量

远程工作目录(可以不存在)

用法-只允许绑定到这台机器的job

Lanch slave agents on unix machines  vis SSH

增加认证权限

节点的构建环境要符合job的要求

分配任务到节点

在任务配置中勾选Restrict where this project can be run

1.16 权限  按角色授权(这个很重要,权限的限制)

笔者的salt是直接使用root用户执行,而为了使用jenkins用户执行的jenkins能够执行saltstack,做了个sudo权限审计,不可避免就是权限过大。

那么这里的限制是很重要的。比如不能让开发修改JOB的配置文件。只给构建和执行。还有就是线上的构建他们是看不到的,只能自己看到自己的代码。

 

插件Role-based Authorization Strategy

 

创建用户

刚创建是没权限登陆的。需要一个只读的权限,才能登陆jenkins。、

建项目角色

系统设置

 

 

要有只读权限,view,不然登陆不上。

下面是全局配置

下面是给角色,也就是用户分配项目

 

 

1.17 pipeline

pipeline,也就是流水线。构建完第一个项目之后,紧跟这第二个项目。你们自己类比下,福特公司的流水线给他带来多大的好处。

插件:pipeline

新建一个pipe项目

生成pipeline脚本即可。

node {  

       stage 'Stage 1'  

       build ‘dev’ 

       stage 'Stage 2'  

       build ‘python’

}
# 点击左下角,有解释其他用法,比如如何执行shell,执行等等。

末尾:认为此博客有一点帮助的,就点击右边的赞助,来吧。

你们的支持是笔者多写点工作上的困难,问题的动力。

 

posted @ 2017-08-11 16:45  汉克书  阅读(1546)  评论(0编辑  收藏  举报