介绍

Jenkins 是一款由 Java 编写的开源的持续集成工具。

系列文章

这一系列文章中的软件是在同一台机器上安装配置的,完整地记录了配置过程。解决了同时部署各种服务之间可能会产生的问题,最终将各种服务整合到一起。每个服务都配置使用域名访问,便于使用。

账号系统未使用 LDAP,因此 Jira 与 GitLab 账号是独立的,Jenkins 与 Mattermost 使用 GitLab 账号登录。

环境

  • CentOS 7.6 1810
  • jenkins 2.150.2

策略

Jenkins 维护稳定版与开发版两个版本,因为是在生产环境使用,因此需要使用稳定版本。

Jenkins 官方提供稳定版本的 CentOS 源,因此可以直接使用此源进行安装与升级。

安装

Java 运行时

OpenJDK Runtime Environment

1
2
3
4
5
6
yum install -y java-1.8.0-openjdk

java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Jenkins

1
2
3
4
yum install -y wget
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install -y jenkins

配置

端口

由于同一台机器上安装的 GitLab 中的 unicorn 使用了 8080 端口,因此需要修改端口为其他端口。

JENKINS_PORT 的值修改为 5000

1
vi /etc/sysconfig/jenkins

注意:端口不要使用浏览器禁用的不安全端口,否则无法访问,如 6000Chrome 非安全端口限制 | javasgl

防火墙

1
2
3
4
5
6
firewall-cmd --permanent --new-service=jenkins
firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports"
firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions"
firewall-cmd --permanent --service=jenkins --add-port=5000/tcp
firewall-cmd --zone=public --add-service=jenkins --permanent
firewall-cmd --reload

启动

1
2
chkconfig jenkins on
systemctl start jenkins

提示:使用 systemctl enable jenkins 会报以下警告:

1
2
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on

注意:有时会出现 systemctl status jenkins 显示启动正常,tail -f /var/log/jenkins/jenkins.log 中显示没有启动的日志,可以使用 netstat -tupln | grep 5000 来确定 Jenkins 的确是启动了,如果显示没有对应端口的 java 程序,可以尝试手动 stop 后再 start,而不是使用 restart 命令重启。

停止

1
systemctl stop jenkins

登录

首次登录时需要输入密码:

1
grep -A 5 password /var/log/jenkins/jenkins.log

插件

这里随意选择安装,建议选择安装推荐插件。

账号

设置管理员账号

Blue Ocean

Jenkins 内置新版本的皮肤与功能,可以方便地支持多个管线构建。 在插件管理中直接安装即可。

GitLab 登录

注意:将以下内容提到的 http://ci.company.com:5000 替换成实际的服务器地址与端口。

GitLab

在 GitLab 中创建 ApplicationScope 选择 api,URL 填写 http://ci.company.com:5000/securityRealm/finishLogin

Jenkins

插件管理 中安装 Gitlab Authentication plugin,然后前往 全局安全设置Security Realm 选择 Gitlab Authentication plugin,信息按如下填写:

域名

Nginx 安装可以参考 GitLab 安装配置 - 狂飙 中的 同服务器共享 Nginx 一节。

vi /etc/nginx/conf.d/jenkins.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
server {
    listen       80;
    server_name  ci.company.com;
    client_max_body_size 60M;
    client_body_buffer_size 512k;
    location / {
        proxy_pass
        http://127.0.0.1:5000;
        proxy_redirect   off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置完成后可以直接省略端口,直接使用 http://ci.company.com 访问。

节点

配置节点

需要开启安全选项中的 TCP port for JNLP agents 功能才可以在 Agent 启动选项中增加 JLNP Agent。

注意:TCP port for JNLP agents 端口设置为固定的端口,可以任意选择如 5001,但一定要是一个与默认服务端口不同的端口。

配置防火墙,允许上述配置的端口访问

1
2
firewall-cmd --permanent --service=jenkins --add-port=5001/tcp
firewall-cmd --reload

运行时有以下提示时需要仔细检查目录路径是否正确。

1
Exception in thread "main" java.nio.file.FileSystemException: /Users/MacMini Operation not supported

配置完选项后就可以到节点管理中添加节点,Launch method 选择 通过Java Web启动代理

运行节点

根据上面配置完成新的 Agent 之后,页面会提示运行的命令,将其放在对应平台的 JenkinsAgent.shJenkinsAgent.bat 中运行即可。

配置自动启动,Windows 可以将 JenkinsAgent.bat 的快捷方式放到开始菜单中的 启动 目录中。

升级

在升级前保证没有任务正在执行。

1
2
3
systemctl stop jenkins
yum update -y jenkins
systemctl start jenkins