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 uninstallsudo rm -rf /usr/local/bin/gitlab-runnersudo userdel gitlab-runnersudo rm -rf /home/gitlab-runner/
//2.干掉对应进程即可 kill -9 pid值
<a name="TrT2u"></a>### 2.安装指南获取gitlab->setting->CI/CD->Runners->Show runner installation instructions<br /><br /><a name="c9DiP"></a>### 3.新建gitlab-runner工作文件夹working-directory1. 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-runnersudo gitlab-runner start<a name="Mqx8m"></a>### 9.查看状态gitlab-runner status<br />_出现running代表启动成功,如果启动失败可以看下是否没有创建working-directory_<br /><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以及Tokengitlab->setting->CI/CD->Runners<br /><a name="WzEh3"></a>### 2.注册gitlab-runnersudo 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 /> <a name="OOhk8"></a>## 4.安装配置supervisor<a name="AFIYM"></a>### 1.卸载supervisor(如果需要的话)1. yum -y remove supervisor2. whereis supervisord3. 第二步返回的结果4. rm -rf 第二步返回的结果5. ps -ef|grep supervisor6. kill -9 第五步的PID值<a name="Pm2Bo"></a>### 2.安装supervisoryum install supervisor<a name="Iaugs"></a>### 3.查看supervisord.conf文件vim /etc/supervisord.conf<br /><br />1. 查看unix_http_server下file选项所示的文件是否存在,千万要确定一下!2. 查看supervisorctl下serverurl选项所示的文件是否存在,千万要确定一下!3. 看include配置,后续的程序启动文件都会按照include所示的文件格式,放在include指定的文件夹下<a name="GkyPS"></a>### 4.启动supervisor1. 找到对应文件:find / -name supervisor.sock2. 可能会返回如下: /run/supervisor.sock;/run/supervisor/supervisor.sock3. unlink 第2步的返回文件:unlink /run/supervisor.sock;unlink /run/supervisor/supervisor.sock4. 执行命令启动(该命令执行一次就会启动一个进程,请注意!):supervisord -c /etc/supervisord.conf5. 查看进程判定判定是否顺利启动:ps -ef|grep supervisor<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/servercommand=java -jar -Dspring.profiles.active=test /data/yuffie-server/server/yuffie-server.jarautorestart=trueredirect_stderr=truestdout_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 update6. 重新启动所有任务:supervisorctl reload7. 停止所有任务:supervisorctl stop all<a name="CbaU9"></a>## 5.gitlab-ci.yml说明具体可参考官方文档:[官方地址](https://docs.gitlab.com/ee/ci/yaml/index.html)```powershellstages:- build# 定义变量before_script:- export PROJECT_NAME=${CI_PROJECT_NAME}_${CI_COMMIT_SHA}# 部署测试环境deploy-test:stage: buildonly:- testscript:- 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.shtags:- 10.128.41.141# 部署正式环境deploy-prod:stage: buildonly:- masterscript:- 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-servertags:- 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执行
