背景

因为另一台服务器今年到期,不打算再续费了(有些承受不住)。之前 jenkins 是直接安装在这台服务器上的,步骤繁琐且不方便迁移,因而这次想通过 docker 来部署 jenkins ;在本地实践后发现简单易上手,因而记录一下,后续就可以实现自己项目的发布。

docker 安装 jenkins

通过 docker search 命令查找 docker 官方 jenkins 镜像。一般使用 jenkins/jenkins 这个,第一个 jenkins 镜像启动会有一些警告提示,因而没有采用。

拉取完后就可以直接运行镜像创建一个 jenkins 容器了。(eg:记得先打开服务器防火墙的端口)

1
2
3
docker run -d --restart always -ti -p 主机端口:8080 jenkins/jenkins

添加上 --restart always 参数 表示出现问题会重启

启动后可以看到默认的登陆密码,如果后续忘记了,需要通过进入 jenkins 的容器内查看

1
2
3
4
docker exec -it 容器id /bin/bash

# 通过cat命令查看密码
cat /var/jenkins_home/secrets/initialAdminPassword

选择推荐插件安装即可


安装完成界面,可以看到中文插件翻译不全的问题。

要解决这个问题,先检查是否安装了两个插件 Locale 和 Localization: Chinese (Simplified)

都安装好后,修改 jenkins 的配置

然后重启 jenkins,如果不生效,需要按照以下步骤重试

  • 先修改 Locale 为 zh_US,然后重启

  • 再修改 Locale 为 zh_CN,然后重启

新版本的 jenkins 做不到完全中文,应该是跟 jenkins 新版本对中文插件支持的兼容问题。之前机器上的旧版本 jenkins 对中文包支持较好,如果不能忍受这种问题,推荐降级 jenkins 的版本。

安装插件

安装插件 Rebuilder,SafeRestart,NodeJs,Publish over SSH,Generic Webhook Trigger ,然后重启。

设置全局 node

在系统配置中 设置全局 ssh 连接服务器用户

设置完后测试是否连接成功,返回 success 即为成功

创建一个 jenkins 任务并发布

选择新建一个任务并创建

配置完成后就可以进行打包了

任务执行结束后,会把配置的打包目录传递到想要传递给服务器的目录中

在 git/gitee 中添加 webhook

jenkins 配置好后,可以给 git/gitee 等代码托管平台添加 webhook,在提交代码后,来自动触发 jenkins 执行打包/发布任务。下面以 gitee 为例,在一个项目的管理中,通过 webhook 配置。

我这里选择的 push 时候,只要提交代码,就会去触发一次 jenkins 对应的任务。

nginx 代理 jenkins

现在 jenkins 仍通过 ip+端口的返回访问,有些丑陋,用 nginx 反向代理一下 jenkins 服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name jenkins.ogree.com;
location /{
proxy_set_header Access-Control-Allow-Origin *;
proxy_pass xxxxx:9080;
proxy_read_timeout 90;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}

最后通过 nginx -s reload 重新加载一下配置,就可以通过域名访问了。