目录
安装 Jenkins
以 CentOS 为例,首先安装 JDK
yum install java-11-openjdk-devel
然后安装 Jenkins
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install epel-release
yum install jenkins
systemctl daemon-reload
启动 Jenkins 服务
systemctl start jenkins
systemctl enable jenkins
如果服务器开启了防火墙,则配置如下例外规则(端口号改成你自己的)
YOURPORT=8080
PERM="--permanent"
SERV="$PERM --service=jenkins"
firewall-cmd $PERM --new-service=jenkins
firewall-cmd $SERV --set-short="Jenkins ports"
firewall-cmd $SERV --set-description="Jenkins port exceptions"
firewall-cmd $SERV --add-port=$YOURPORT/tcp
firewall-cmd $PERM --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
这样你的 Jenkins 服务就可以访问了,假设访问地址为 http://yourjenkins.com:8080
,首次进入后需要进行解锁,安装插件,创建管理员等初始化操作,之后就可以用管理员账号登录到 Jenkins Dashboard 了。
创建 Jenkins Pipeline
在 Dashboard 中点击 New Item ,输入名称,选择 Freestyle project ,点击 OK 进入下一步进行配置。下面介绍其中需要注意的几项配置。
Source Code Management
以放在 Github 的项目为例,为了能在 Jenkins 中拉取代码,首先需要在 Github 中创建 personal access token ,然后将 https://<personal access token>@github.com/<username>/<repository>.git
作为 Repository URL 填入。
Build Triggers
勾选 GitHub hook trigger for GITScm polling ,然后在 Github 项目下创建 Webhook : Settings > Webhooks > Add webhook ,在 Payload URL 中填入 http://yourjenkins.com:8080/github-webhook/
,在 Content type 中选择 application/json
, Secret 不填,最后点击 Add webhook 提交。
Build
第一步:构建
由于要构建的是使用 Gradle 的 Spring Boot 项目,我们在这里选择 Add build step > Invoke Gradle script ,在 Tasks 中填入 bootJar
。
第二步:部署
我们需要使用 shell 命令将构建产物移动到目标目录(这里以 /var/lib/myapp
为例),并且授予其执行权限,因此选择 Add build step > Execute shell ,在 Command 中填入:
mv build/libs/*.jar /var/lib/myapp/myapp.jar
chmod o+x /var/lib/myapp/myapp.jar
最后点击 Save 保存即可。
将 Spring Boot 应用安装为 Linux 系统服务
要安装为系统服务,首先我们需要确保构建的是 fully executable jar ,需要在项目 Gradle 配置中添加:
bootJar {
launchScript()
}
然后在 /etc/systemd/system
目录下创建 myapp.service
文件,文件内容示例如下:
[Unit]
Description=myapp
After=syslog.target
[Service]
User=myapp
ExecStart=/var/lib/myapp/myapp.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
提醒
根据你的应用修改 Description
, User
, ExecStart
的值。
最后启动该服务
systemctl start myapp.service
systemctl enable myapp.service
重新部署后自动重启服务
我们使用 systemd path units 来监控部署目标目录,在 /etc/systemd/system
目录下创建 myapp-watcher.path 文件:
[Path]
PathChanged=/var/lib/myapp/myapp.jar
[Install]
WantedBy=multi-user.target
然后使用另一个 systemd service 来重新启动之前创建的 myapp.service , 在 /etc/systemd/system
目录下创建 myapp-watcher.service 文件:
[Unit]
Description=myapp restarter
After=syslog.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart myapp.service
[Install]
WantedBy=multi-user.target
最后我们启动 myapp-watcher.path
systemctl start myapp-watcher.path
systemctl enable myapp-watcher.path
这样当 /var/lib/myapp/myapp.jar
文件改变的时候,就会启动 myapp-watcher
服务,从而执行重启 myapp.service
的命令。