Jenkins笔记一篇就够

首先声明,我时在centos7.4上安装的。其他centos应该类似。

0 参考网址

安装配置:
* https://www.cnblogs.com/gcgc/p/5631385.html 讲了如何添加触发条件。
* http://blog.csdn.net/a464057216/article/details/51865148
* http://blog.csdn.net/secretx/article/details/51066395

如同《Gitlab搭建内网服务器一篇就够》,本文分两部分,第一部分介绍传统方式安装Jenkins,第二部分介绍Docker安装(推荐)。

1 安装

  • 安装java(jenkins需要java)
  • 下载jenkins的官网repo源
  • rpm导入jenkins官网的公钥(因为是https下载的)
  • 安装jenkins。
#yum install java
#wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
#rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
#yum -y install jenkins

配置文件在/etc/sysconfig/jenkins,web服务(jetty)默认使用8080端口,若要修改,编辑配置文件里JENKINS_PORT变量;建议改成8081(如果你用gitlab的unicorn也默认8080端口),把8080留给gitlab。

然后设置防火墙、启动/开机启动jenkins

#firewall-cmd --zone=public --add-port=8081/tcp --permanent
#firewall-cmd --reload
#systemctl start jenkins
#systemctl enable jenkins

注: firewall-cmd命令含义:
1. –zone #作用域
2. –add-port=8081/tcp
3. #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效。

日志存储在/var/log/jenkins/jenkins.log。

接着就可浏览器访问localhost:8081,访问不了的话,看看是否防火墙。

根据提示输入验证随机密码,然后安装插件,此时可能提示
“Jenkins maybe offline”,因为你没有科学上网,所以挂个VPN吧骚年。
如果日后想要升级的话,直接重新 #yum -y install jenkins 即可。

2 配置

安装成功后,登录到localhost:8081,系统要求你Unlock Jenkins:

#cat /var/lib/jenkins/secrets/initialAdminPassword

看一下系统中的那串随机密码然后输入。
接着会给你推荐插件,你可以选择Install suggested plugins,也可以Customize。
如果自定义,建议必装的插件:
* Git Plugin:使用Git作为源代码管理
* Python Plugin:Adds the ability to execute python scripts as build steps.
* Violations:代码质量检测,支持pylint、jslint等
* Email Extension Plugin: 邮件通知服务。
*

配置邮件服务

  • 1 【系统管理 - 系统设置】里,下拉找到【Jenkins Location】,输入系统管理员邮件地址(以qq为例,如[email protected])。
  • 2 下拉到最后,找到【邮件通知】。【SMTP服务器】输入【smtp.qq.com】;【用户默认后缀】输入【@qq.com】;点击高级并勾选【使用SMTP认证】;【用户名】一定要和上面系统管理员邮件地址相同,如【[email protected]】;【密码】可以是【账户密码/客户端授权码】;勾选【使用ssl协议】,【SMTP】端口使用【465】;【Reply-ToAddress输入和上方相同的【[email protected]】,【字符集】用utf-8。
  • 勾选【通过发送测试邮件测试配置】,然后输入一个email地址,点击测试并检查是否收到即可。
  • 注意:你的管理员邮箱(即[email protected])必须要开通POP3/SMTP服务,具体可以登录QQ邮箱,【设置 - 账户 - 开启服务】中勾选。我配置时开了两个:【POP3/SMTP服务】、【IMAP/SMTP服务】。
  • *

使用docker方式部署

安装好docker后,下载一个lts版本:

# docker pull registry.docker-cn.com/jenkins/jenkins:lts
# 然后重命名成[jenkins/jenkins:lts]

———-如下步骤为可选—————
如果你想让jenkins的数据都保存到指定目录,那就pull完毕后,用docker tags来重命名,然后在centos上创建一个jenkins/data数据卷目录,如:

#/home/kyle/dockers/jenkins/data
#sudo chown -R 1000 jenkins 

注意一定要给jenkins目录普通用户的权限,否则会出现下面错误:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

————–可选结束———————–
在jenkins下见一个docker-compose.yml,内容如下:

version: '2'
services:
    jenkins:
        image: 'jenkins/jenkins:lts'
        restart: unless-stopped
        container_name: jenkins
        user: root
        ports:
            - '8080:8080'
        volumes:
            - './data/:/var/jenkins_home'
        external_links:   # 连接到gitlab容器
            - gitlab:gitlab.etaray.com

>
完成后,docker-compose up -d即可启动。然后设置密码、安装插件等。

配置gitlab连接

首先记住一点:所有要和Gitlab交互(推、拉代码)的,都需要SSH-key绑定授权。
然后看下图:

Git开发端(推上去提交)-->--Gitlab-->--Jenkins(拉下来构建)

所以要在你的Git开发端和Jenkins都要生成ssh-key。并且都要吧二者的id_rsa.pub传到gitlab的SSH-keys中。

先试试jenkins能否ping通gitlab的容器(ping container_name):

# docker exec -it jenkins ping gitlab
# docker network inspect gitlab_default

上面第二条能查出gitlab_default网络的信息(CONTAINERS应该有它们两个容器)。

上面完成后,依次:
- gitlab中,管理员登录,右上角头像 - 设置 - 访问令牌(API Token)
- 令牌名称随意,过期时间可不填,范围选择完全访问,复制令牌码。
- jenkins中,系统管理 - 插件管理中,安装【Gitlab Plugin】、【Build Authorization Token Root Plugin】,若不安装后者则Gitlab的Test Hook时可能报403错。
- 系统管理 - 系统设置中,下拉找到【Gitlab】配置栏。
- connection name 随便选。地址输入Gitlab访问地址【http://X.X.X.X】。
- Credentials选择添加,弹出框的Kind选择GitLab API token,在API token粘贴令牌码,其余默认或不填。
- 点击完成回到页面,就可以下拉选择该token了。
- 点击测试,出现Success即可配置完成。
- 找到【Git plugin】(若没有请安装),配置用户名密码(因为要用此账户拉取代码)。
- 在jenkins机器上使用ssh-keygen生成密钥并将公钥填到gitlab用户配置中。

测试一个hello项目

  • gitlab上,先新建一个hello项目,并提交一些东西。
  • jenkins主页面,新建 - 名字随便填(hello) - 自由风格 - 点击底部确定。

Gitlab Plugin官方说只支持freestyle和pipline风格的项目。另有Gitlab Hook插件(稍老旧)貌似可以替代它,具体没深究。

  • 下个页面有很多选择:
    • 【General】不用改变。
    • 【源码管理】页面 - 选[Git] - Repositories从Gitlab页面复制ssh或http风格。
    • Credentials若选择(若hello是有项目则无需选择):
    • Username with password:则输入能访问此仓库的gitlab用户账号即可。
    • SSH Username with private key:则和git客户端一样,需要输入你ssh访问的凭据(你jenkins上linux的用户和私钥,且保证公钥已加入的gitlab中)。私钥我选择Enter directly。然后cat id_rsa后粘贴进去。
    • 其余选项貌似都不行(尤其那个Gitlab API token)。
    • Add完成后返回主界面,下拉选择Credentials,若没报红色错误说明正确,否则自行排查。
    • Branches to build是监控的分支名,默认master,当然你也可以弄一个release分支然后监控它。
    • 【构建触发器】页面 - 选[Build when a change is pushed to Gitlab…],记下后面的URL。
    • 点选[高级],Secret token 下方点击[Generate],记下token。其余默认。
    • 【构建环境】跳过。【构建】页面[添加构建步骤],根据实际情况填写。测试如[Execute Shell],然后echo ‘hello world!’。
    • 【构建后操作】选择publish build status to Gitlabcommit。
    • 点击保存。
    • Gitlab页面,hello项目主页 - 设置 - 集成 - 添加Web钩子 - URL和令牌(token)都从上面Jenkins里粘贴(其余默认) - 保存。
    • 本页面点击[Test] - Pull Event, 若看到顶部提示HTTP 200成功(若403注意是上面否安装了Build Auth Token插件)。
  • 接下来可以在你的git客户端上push到监控分支(上面监控的是master)一次,可以看到gitlab、jenkins都已经有了相应的构建记录。当然你也可以直接在gitlab上编辑某文件然后提交保存。同样能触发。

以上参考:https://www.cnblogs.com/bugsbunny/p/7919993.html

至此完成。后续也可以使用docker构建(前提要用Docker outside of Docker来将宿主机的Docker工具映射/暴露到Jenkins里以便其调用,因为Jenkins的镜像并没有封装docker)。具体可参考:http://blog.csdn.net/zhou8622/article/details/52259709。

你可能感兴趣的:(Docker,运维,编程点滴,Linux笔记)