1.登录服务器创建项目目录

以下步骤并没有强制要求,可根据个人习惯进行调整

  1. cd data(通常建议在data下创建目录)
  2. mkdir ${projectName} (创建项目对应的文件夹目录)
  3. cd ${projectName}
  4. mkdir server(创建用于存放服务端项目文件夹)
  5. mkdir ui(创建用于存放客户端项目文件夹)
  6. mkdir logs(创建用于存放服务端日志项目文件夹)
  7. 回到data文件夹下
  8. chown -R gitlab-runner ${projectName}(递归授权项目文件夹给gitlab-runner用户,如果girlab-runner使用root用户的话也可以不用)

    2.gitlab-runner安装

    1.卸载gitlab-runner(如果需要的话)

    执行如下命令
    1. sudo gitlab-runner uninstall
    2. sudo rm -rf /usr/local/bin/gitlab-runner
    3. sudo userdel gitlab-runner
    4. sudo rm -rf /home/gitlab-runner/
    干掉正在运行的gitlab-runner进程 ```powershell //1.找到对应进程 ps -ef|grep gitlab-runner

//2.干掉对应进程即可 kill -9 pid值

  1. <a name="TrT2u"></a>
  2. ### 2.安装指南获取
  3. 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)
  4. <a name="c9DiP"></a>
  5. ### 3.新建gitlab-runner工作文件夹working-directory
  6. 1. cd data(个人喜欢放在data文件夹下)
  7. 2. mkdir gitlab-runner
  8. <a name="uNT75"></a>
  9. ### 4.下载gitlab-runner
  10. **注意这一步下载特别慢,耐心等待!!!!**<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:要是太慢下载不来可通过中间服务器远程复制_**
  11. 1. _通过海外服务器下载_
  12. 2. _登录中控从海外服务器拉取gitlab-runner_
  13. **_scp -r root@10.128.96.36:/usr/local/bin/gitlab-runner /usr/local/bin/gitlab-runner_**
  14. 3. _登录中控将gitlab-runner复制到下载慢的服务器_
  15. **_scp -r /usr/local/bin/gitlab-runner root@10.128.41.141:/usr/local/bin/gitlab-runner_**
  16. <a name="uT2z6"></a>
  17. ### 5.授权
  18. sudo chmod +x /usr/local/bin/gitlab-runner
  19. <a name="uuZSr"></a>
  20. ### 6.创建gitlab-runner用户(非必须步骤)
  21. sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash<br />_为了严谨可以选择创建用户,当然也可以用root用户操作。如果使用gitlab-runner用户的话需开通各种权限_
  22. <a name="tORn5"></a>
  23. ### 7.安装gitlab-runner(可选择指定用户为root用户)
  24. sudo gitlab-runner install --working-directory=/data/gitlab-runner --user root<br />_这里面working-directory个人更喜欢放在data下_
  25. <a name="D2Vhk"></a>
  26. ### 8.启动gitlab-runner
  27. sudo gitlab-runner start
  28. <a name="Mqx8m"></a>
  29. ### 9.查看状态
  30. 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)
  31. <a name="xffPV"></a>
  32. ### 10.查看gitlab-runner执行用户以及其否启动
  33. ps -aux|grep supervisor<br />_确定用户为root即可。如果不是重新卸载安装一下就好。当然这取决于需求,如果对权限要求较高还是新建gitlab-runner用户_
  34. <a name="EVrW9"></a>
  35. ## 3.gitlab-runner注册
  36. <a name="dqwZg"></a>
  37. ### 1.获取注册URL以及Token
  38. 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)
  39. <a name="WzEh3"></a>
  40. ### 2.注册gitlab-runner
  41. sudo gitlab-runner register
  42. <a name="AYBjQ"></a>
  43. ### 3.输入URL
  44. 输入第一步获取到的url即可
  45. <a name="ITGrY"></a>
  46. ### 4.输入Token
  47. 输入第一步获取到的token即可
  48. <a name="fMnic"></a>
  49. ### 5.输入描述
  50. 自定义描述即可,用于在第一步所示页面对runner进行描述
  51. <a name="Gb2ow"></a>
  52. ### 6.输入tags
  53. 用于在CI文件中通过tags指定使用哪个gitlab-runner
  54. <a name="W7Fww"></a>
  55. ### 7.选择运行方式
  56. 一般来说都会使用shell,可根据自己情况自行决定
  57. <a name="jb3Ci"></a>
  58. ### 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)
  59. <a name="OOhk8"></a>
  60. ## 4.安装配置supervisor
  61. <a name="AFIYM"></a>
  62. ### 1.卸载supervisor(如果需要的话)
  63. 1. yum -y remove supervisor
  64. 2. whereis supervisord
  65. 3. 第二步返回的结果
  66. 4. rm -rf 第二步返回的结果
  67. 5. ps -ef|grep supervisor
  68. 6. kill -9 第五步的PID值
  69. <a name="Pm2Bo"></a>
  70. ### 2.安装supervisor
  71. yum install supervisor
  72. <a name="Iaugs"></a>
  73. ### 3.查看supervisord.conf文件
  74. 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)
  75. 1. 查看unix_http_server下file选项所示的文件是否存在,千万要确定一下!
  76. 2. 查看supervisorctl下serverurl选项所示的文件是否存在,千万要确定一下!
  77. 3. 看include配置,后续的程序启动文件都会按照include所示的文件格式,放在include指定的文件夹下
  78. <a name="GkyPS"></a>
  79. ### 4.启动supervisor
  80. 1. 找到对应文件:find / -name supervisor.sock
  81. 2. 可能会返回如下: /run/supervisor.sock;/run/supervisor/supervisor.sock
  82. 3. unlink 第2步的返回文件:unlink /run/supervisor.sock;unlink /run/supervisor/supervisor.sock
  83. 4. 执行命令启动(该命令执行一次就会启动一个进程,请注意!):supervisord -c /etc/supervisord.conf
  84. 5. 查看进程判定判定是否顺利启动:ps -ef|grep supervisor
  85. ![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)
  86. <a name="LB43v"></a>
  87. ### 5.进入配置文件目录下
  88. cd /etc/supervisord.d
  89. <a name="bW7Ej"></a>
  90. ### 6.创建项目配置文件
  91. touch ${projectName}.ini
  92. <a name="yrInL"></a>
  93. ### 7.配置文件示例与说明
  94. vim ${projectName}.ini
  95. ```powershell
  96. [program:yuffie-server]
  97. directory=/data/yuffie-server/server
  98. command=java -jar -Dspring.profiles.active=test /data/yuffie-server/server/yuffie-server.jar
  99. autorestart=true
  100. redirect_stderr=true
  101. 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 update

    9.查看supervisor状态

    supervisorctl status
    只要出现执行进程即可,不用running状态,后续结合gitlab-runner启动项目

    10.启动supervisor可能遇到的问题

  1. 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
  2. Unlinking stale socket /var/run/supervisor/supervisor.sock
  3. supervisor管理的进程一直因为端口号占用重启

对应解决方案

  1. 第一个问题执行如下命令

    1. //1.找到对应进程
    2. ps -ef|grep supervisord
    3. //2.干掉对应进程即可
    4. kill -9 pid
  2. 第二个问题执行如下命令 ```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

  1. 3. 第三个问题可能是执行了多次 **supervisord -c /etc/supervisord.conf **命令。
  2. ps -ef|grep supervisor找到所有进程,**kill -9 对应的pid **干掉对应的进程就好了
  3. <a name="PLmTv"></a>
  4. ### 11.supervisor其他命令
  5. 1. 查看单个任务状态: supervisorctl status 服务名
  6. 2. 启动单个任务:supervisorctl start 服务名
  7. 3. 停止单个任务:supervisorctl stop 服务名
  8. 4. 重启单个任务:supervisorctl restart 服务名
  9. 5. 更新任务(新建配置文件后):supervisorctl update
  10. 6. 重新启动所有任务:supervisorctl reload
  11. 7. 停止所有任务:supervisorctl stop all
  12. <a name="CbaU9"></a>
  13. ## 5.gitlab-ci.yml说明
  14. 具体可参考官方文档:[官方地址](https://docs.gitlab.com/ee/ci/yaml/index.html)
  15. ```powershell
  16. stages:
  17. - build
  18. # 定义变量
  19. before_script:
  20. - export PROJECT_NAME=${CI_PROJECT_NAME}_${CI_COMMIT_SHA}
  21. # 部署测试环境
  22. deploy-test:
  23. stage: build
  24. only:
  25. - test
  26. script:
  27. - echo $PROJECT_NAME
  28. - cd $CI_PROJECT_DIR
  29. - mvn clean package -Dmaven.test.skip=true
  30. - mv target/yuffie-server3-0.0.1-SNAPSHOT.jar /home/yuffie3
  31. - bash start-yuffie3-test.sh
  32. tags:
  33. - 10.128.41.141
  34. # 部署正式环境
  35. deploy-prod:
  36. stage: build
  37. only:
  38. - master
  39. script:
  40. - echo $PROJECT_NAME
  41. # 构建
  42. - cd $CI_PROJECT_DIR
  43. - mvn clean package -Dmaven.test.skip=true
  44. - mv target/yuffie-server3-0.0.1-SNAPSHOT.jar /data/yuffie-server/yuffie-server.jar
  45. - supervisorctl restart yuffie-server
  46. tags:
  47. - 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执行