SDUDOC实训记录 山东大学创新实训记录
安装配置Gitlab CICD RunnerRunner是用来跑CICD Pipeline任务。没有Runner就跑不了任何pipeline。
Gitlab Runner的安装有两种方式,一种是直接安装二进制文件并运行,另一种是使用gitlab runner的docker镜像。考虑稳定性和通用性,我使用后者来进行安装。
- 首先机器需要安装docker,这部分很基础就不细说了。
- 直接输入以下命令,完成runner镜像的安装和启动:
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
- 输入以下命令为Gitlab注册Runner:
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
- 使用管理员账号登录gitlab,进入后台管理-概览-Runner,按照Gitlab上的提示输入上一步register中所需要的相关信息:
- 添加成功后,注意修改Runner的类型和标签。
shared - Runner将运行所有未指定的项目的作业
group - Runner将运行群组中所有未指定项目的作业
specific - Runner将运行指定项目的作业
locked - 无法将Runner分配给其他项目
paused - Runner不会接受新的作业
标签也需要注意:如果设置了标签,那么只有同一个标签的项目才能使用这个runner,不设置则所有的项目都会使用这个runner。
配置好了runner之后,需要去项目仓库里看看是不是有runner可用了:
按理来说上一步的配置完后可以直接看到已经有Available shared Runner了。如果没有,可以手动配置一个专用的Runner,步骤参照上一步。
启用Runner后,我们可以为项目配置自定义的Pipeline了。请直接参考下面的配置文件,下面会给出解释:
default:
image: 'node:lts'
stages:
- test
- build
- deploy
cache:
paths:
- node_modules
- dist
test-job:
stage: test
script:
- npm install
- npm run lint
build-job:
only:
- master
stage: build
script:
- npm run build
artifacts:
name: 'bundle'
paths:
- dist/
deploy-job:
only:
- master
stage: deploy
script:
- apt update && apt install sshpass -y
- sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $CUSTOM_USERNAME@$CUSTOM_IP "rm -rf /var/www/html/static/sdudoc || echo dir not exists"
- sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no -r ./dist $CUSTOM_USERNAME@$CUSTOM_IP:/var/www/html/static/sdudoc
在这个配置里,我们指定pipeline要做这些事情:
default: image: 'node:lts'
所有的job都是用node:lts这个docker镜像运行。这里注意,每个job都会pull一遍这个镜像,然后重新clone仓库代码,并且都在独立的container中完成,彼此之间相互隔离。
stages: - test - build - deploy
定义这个pipeline一共有这3个阶段。
cache:
paths:
- node_modules
- dist
规定这两个目录为缓存,也就是说每次job完成后都会保存上传这两个目录的内容,并在下个job开始前事先把上一次保存的内容下载到将要执行的job的容器里以供其使用。
- 接下来就是定义每个任务要做的事了。其中only关键字指定该任务只在相应的分支上才会进行,不是该分支则会跳过这个job。
此外,可以看到最后一步deploy-job这里使用了环境变量,这里的环境变量一般是服务器账号密码之类的敏感信息,不适合出现在代码或配置文件里,我们可以去gitlab的项目仓库上配置:
在Gitlab项目设置-CICD-General pipelines下面有给出链接,直接在md中引入就好:



