1.登录服务器创建项目目录
以下步骤并没有强制要求,可根据个人习惯进行调整
- cd data(通常建议在data下创建目录)
- mkdir ${projectName} (创建项目对应的文件夹目录)
- cd ${projectName}
- mkdir server(创建用于存放服务端项目文件夹)
- mkdir ui(创建用于存放客户端项目文件夹)
- mkdir logs(创建用于存放服务端日志项目文件夹)
- 回到data文件夹下
- chown -R gitlab-runner ${projectName}(递归授权项目文件夹给gitlab-runner用户,如果girlab-runner使用root用户的话也可以不用)
2.gitlab-runner安装
1.卸载gitlab-runner(如果需要的话)
执行如下命令
干掉正在运行的gitlab-runner进程 ```powershell //1.找到对应进程 ps -ef|grep gitlab-runnersudo gitlab-runner uninstall
sudo rm -rf /usr/local/bin/gitlab-runner
sudo userdel gitlab-runner
sudo rm -rf /home/gitlab-runner/
//2.干掉对应进程即可 kill -9 pid值
<a name="TrT2u"></a>
### 2.安装指南获取
gitlab->setting->CI/CD->Runners->Show runner installation instructions<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653395014918-d92addad-6d5f-4150-914d-3ba8604a1188.png#clientId=u088b9b18-f7cf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=832&id=BxtBA&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1248&originWidth=1259&originalType=binary&ratio=1&rotation=0&showTitle=false&size=173186&status=done&style=none&taskId=u0d01f715-e901-4fa1-804f-e0fdefdd2c9&title=&width=839.3333333333334)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653395044889-76c993c9-0738-4115-ad86-564b102c669c.png#clientId=u088b9b18-f7cf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=781&id=afNyG&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1171&originWidth=1245&originalType=binary&ratio=1&rotation=0&showTitle=false&size=131632&status=done&style=none&taskId=ub6b7d1be-d575-4b73-a82d-416324447ce&title=&width=830)
<a name="c9DiP"></a>
### 3.新建gitlab-runner工作文件夹working-directory
1. cd data(个人喜欢放在data文件夹下)
2. mkdir gitlab-runner
<a name="uNT75"></a>
### 4.下载gitlab-runner
**注意这一步下载特别慢,耐心等待!!!!**<br />sudo wget -O /usr/local/bin/gitlab-runner [https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64](https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64)<br />**_PS:要是太慢下载不来可通过中间服务器远程复制_**
1. _通过海外服务器下载_
2. _登录中控从海外服务器拉取gitlab-runner_
**_scp -r root@10.128.96.36:/usr/local/bin/gitlab-runner /usr/local/bin/gitlab-runner_**
3. _登录中控将gitlab-runner复制到下载慢的服务器_
**_scp -r /usr/local/bin/gitlab-runner root@10.128.41.141:/usr/local/bin/gitlab-runner_**
<a name="uT2z6"></a>
### 5.授权
sudo chmod +x /usr/local/bin/gitlab-runner
<a name="uuZSr"></a>
### 6.创建gitlab-runner用户(非必须步骤)
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash<br />_为了严谨可以选择创建用户,当然也可以用root用户操作。如果使用gitlab-runner用户的话需开通各种权限_
<a name="tORn5"></a>
### 7.安装gitlab-runner(可选择指定用户为root用户)
sudo gitlab-runner install --working-directory=/data/gitlab-runner --user root<br />_这里面working-directory个人更喜欢放在data下_
<a name="D2Vhk"></a>
### 8.启动gitlab-runner
sudo gitlab-runner start
<a name="Mqx8m"></a>
### 9.查看状态
gitlab-runner status<br />_出现running代表启动成功,如果启动失败可以看下是否没有创建working-directory_<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653403041616-ffdbbde5-aba3-45d4-82c8-f6f28f4c5c05.png#clientId=ub291d04c-9901-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=49&id=ehiWG&margin=%5Bobject%20Object%5D&name=image.png&originHeight=74&originWidth=2227&originalType=binary&ratio=1&rotation=0&showTitle=false&size=41760&status=done&style=none&taskId=u22d6dbeb-32b7-47e2-a245-2c36cf47511&title=&width=1484.6666666666667)
<a name="xffPV"></a>
### 10.查看gitlab-runner执行用户以及其否启动
ps -aux|grep supervisor<br />_确定用户为root即可。如果不是重新卸载安装一下就好。当然这取决于需求,如果对权限要求较高还是新建gitlab-runner用户_
<a name="EVrW9"></a>
## 3.gitlab-runner注册
<a name="dqwZg"></a>
### 1.获取注册URL以及Token
gitlab->setting->CI/CD->Runners<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653396988627-d5229e3d-6c3f-4865-8b47-ef8dfbce3352.png#clientId=u088b9b18-f7cf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=815&id=nCt5K&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1222&originWidth=1354&originalType=binary&ratio=1&rotation=0&showTitle=false&size=175536&status=done&style=none&taskId=u25930e09-e3f7-4ab4-8bed-c9951222ee4&title=&width=902.6666666666666)
<a name="WzEh3"></a>
### 2.注册gitlab-runner
sudo gitlab-runner register
<a name="AYBjQ"></a>
### 3.输入URL
输入第一步获取到的url即可
<a name="ITGrY"></a>
### 4.输入Token
输入第一步获取到的token即可
<a name="fMnic"></a>
### 5.输入描述
自定义描述即可,用于在第一步所示页面对runner进行描述
<a name="Gb2ow"></a>
### 6.输入tags
用于在CI文件中通过tags指定使用哪个gitlab-runner
<a name="W7Fww"></a>
### 7.选择运行方式
一般来说都会使用shell,可根据自己情况自行决定
<a name="jb3Ci"></a>
### 8.注册完毕后可通过第一步所示页面进行查看runner是否注册成功<br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653397396705-72335807-47e9-4d21-8360-7d832eea7b6c.png#clientId=u088b9b18-f7cf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=249&id=P1Deq&margin=%5Bobject%20Object%5D&name=image.png&originHeight=374&originWidth=1330&originalType=binary&ratio=1&rotation=0&showTitle=false&size=39670&status=done&style=none&taskId=u3f667edf-0c0f-4bef-b385-6d07b22e06c&title=&width=886.6666666666666)
<a name="OOhk8"></a>
## 4.安装配置supervisor
<a name="AFIYM"></a>
### 1.卸载supervisor(如果需要的话)
1. yum -y remove supervisor
2. whereis supervisord
3. 第二步返回的结果
4. rm -rf 第二步返回的结果
5. ps -ef|grep supervisor
6. kill -9 第五步的PID值
<a name="Pm2Bo"></a>
### 2.安装supervisor
yum install supervisor
<a name="Iaugs"></a>
### 3.查看supervisord.conf文件
vim /etc/supervisord.conf<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653479697774-77859492-379f-4f91-bfde-df1ad1d3b55f.png#clientId=u562d342a-501c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=869&id=u1dd8e167&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1303&originWidth=1507&originalType=binary&ratio=1&rotation=0&showTitle=false&size=617651&status=done&style=none&taskId=u34361809-0d4d-434d-838c-1948c072aaa&title=&width=1004.6666666666666)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653479726868-9912504e-5dea-4281-8e97-804a1452f9ad.png#clientId=u562d342a-501c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=869&id=u7a38ccb6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1303&originWidth=1326&originalType=binary&ratio=1&rotation=0&showTitle=false&size=617751&status=done&style=none&taskId=ube1ac2a3-668d-42b7-9d8d-156421d8096&title=&width=884)
1. 查看unix_http_server下file选项所示的文件是否存在,千万要确定一下!
2. 查看supervisorctl下serverurl选项所示的文件是否存在,千万要确定一下!
3. 看include配置,后续的程序启动文件都会按照include所示的文件格式,放在include指定的文件夹下
<a name="GkyPS"></a>
### 4.启动supervisor
1. 找到对应文件:find / -name supervisor.sock
2. 可能会返回如下: /run/supervisor.sock;/run/supervisor/supervisor.sock
3. unlink 第2步的返回文件:unlink /run/supervisor.sock;unlink /run/supervisor/supervisor.sock
4. 执行命令启动(该命令执行一次就会启动一个进程,请注意!):supervisord -c /etc/supervisord.conf
5. 查看进程判定判定是否顺利启动:ps -ef|grep supervisor
![image.png](https://cdn.nlark.com/yuque/0/2022/png/28218714/1653480178926-849649ad-3e72-4267-bb09-d6d729369320.png#clientId=u562d342a-501c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=78&id=u8974010d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=117&originWidth=1935&originalType=binary&ratio=1&rotation=0&showTitle=false&size=75216&status=done&style=none&taskId=ua4432838-3d40-4e79-963f-1ec5aaaf54a&title=&width=1290)
<a name="LB43v"></a>
### 5.进入配置文件目录下
cd /etc/supervisord.d
<a name="bW7Ej"></a>
### 6.创建项目配置文件
touch ${projectName}.ini
<a name="yrInL"></a>
### 7.配置文件示例与说明
vim ${projectName}.ini
```powershell
[program:yuffie-server]
directory=/data/yuffie-server/server
command=java -jar -Dspring.profiles.active=test /data/yuffie-server/server/yuffie-server.jar
autorestart=true
redirect_stderr=true
stdout_logfile=/data/yuffie-server/logs/yuffie-server.log
文件内容说明:
- program:项目名称
- directory:程序的启动目录
- command:项目启动命令
- autorestart:程序异常退出后自动重启
- user:用哪个用户启动
- redirect_stderr:把 stderr 重定向到 stdout,默认 false
- stdout_logfile:应用日志目录,stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录
- autostart:在 supervisord 启动的时候也自动启动
- startretries:启动失败自动重试次
- stdout_logfile_maxbytes:stdout 日志文件大小,默认 50MB
- stdout_logfile_backups:stdout 日志文件备份数
8.更新配置,用于加载添加的项目配置文件
supervisorctl update9.查看supervisor状态
supervisorctl status
只要出现执行进程即可,不用running状态,后续结合gitlab-runner启动项目10.启动supervisor可能遇到的问题
- Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord
- Unlinking stale socket /var/run/supervisor/supervisor.sock
- supervisor管理的进程一直因为端口号占用重启
对应解决方案
第一个问题执行如下命令
//1.找到对应进程
ps -ef|grep supervisord
//2.干掉对应进程即可
kill -9 pid值
第二个问题执行如下命令 ```powershell //1.找到对应文件 find / -name supervisor.sock
//2.会返回如下 /run/supervisor.sock /run/supervisor/supervisor.sock
//3.unlink 第2步的返回文件 unlink /run/supervisor.sock unlink /run/supervisor/supervisor.sock
3. 第三个问题可能是执行了多次 **supervisord -c /etc/supervisord.conf **命令。
ps -ef|grep supervisor找到所有进程,**kill -9 对应的pid **干掉对应的进程就好了
<a name="PLmTv"></a>
### 11.supervisor其他命令
1. 查看单个任务状态: supervisorctl status 服务名
2. 启动单个任务:supervisorctl start 服务名
3. 停止单个任务:supervisorctl stop 服务名
4. 重启单个任务:supervisorctl restart 服务名
5. 更新任务(新建配置文件后):supervisorctl update
6. 重新启动所有任务:supervisorctl reload
7. 停止所有任务:supervisorctl stop all
<a name="CbaU9"></a>
## 5.gitlab-ci.yml说明
具体可参考官方文档:[官方地址](https://docs.gitlab.com/ee/ci/yaml/index.html)
```powershell
stages:
- build
# 定义变量
before_script:
- export PROJECT_NAME=${CI_PROJECT_NAME}_${CI_COMMIT_SHA}
# 部署测试环境
deploy-test:
stage: build
only:
- test
script:
- echo $PROJECT_NAME
- cd $CI_PROJECT_DIR
- mvn clean package -Dmaven.test.skip=true
- mv target/yuffie-server3-0.0.1-SNAPSHOT.jar /home/yuffie3
- bash start-yuffie3-test.sh
tags:
- 10.128.41.141
# 部署正式环境
deploy-prod:
stage: build
only:
- master
script:
- echo $PROJECT_NAME
# 构建
- cd $CI_PROJECT_DIR
- mvn clean package -Dmaven.test.skip=true
- mv target/yuffie-server3-0.0.1-SNAPSHOT.jar /data/yuffie-server/yuffie-server.jar
- supervisorctl restart yuffie-server
tags:
- 10.128.9.218
1.stages
指定运行的步骤,可在后续的任务中通过stage指定该任务属于哪个步骤。整体的进展会根据stages进行
- 相同 stage 阶段的作业并行运行。
- 默认情况下,上一阶段的作业全部运行成功后才执行下一阶段的作业。
- 默认有三个阶段, build 、test 、deploy 三个阶段,即 构建 、测试 、部署 。
- 如果一个作业未定义 stage 阶段,则作业使用 test 测试阶段。
- 默认情况下,任何一个前置的作业失败了,commit提交会标记为failed并且下一个stages的作业都不会执行
2.before_script
用于定义在所有作业之前需要执行的命令,比如更新代码、安装依赖、打印调试信息之类的事情。同样也存在after_script步骤,用于定义在所有作业(即使失败)之后需要执行的命令,比如清空工作空间3.deploy-test,deploy-prod
具体的任务名称,可自定义,只要符合规范且说明性强即可1.stage
指定该任务属于哪个步骤2.only
指定该任务在提交到哪些分支后才触发3.script
指定该任务具体执行的脚本命令,可以包括打印项目信息,打包,部署,启动项目等4.tags
用于指定当前任务指定哪些runner执行