一、安装
本例中是用安装包直接在ubuntu下安装的,也可以用docker镜像。
curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpmrpm -i gitlab-runner_amd64.rpm
安装runner后,需要跟在runner所在服务器安装jdk和maven
安装完成后,目录/home/gitlab-runner/
二、注册Runner
1、打开gitlab项目
2、在服务器中输入:gitlab-runner register
3、出现以下提示: Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
复制第一步中的URL粘贴。
4、Please enter the gitlab-ci token for this runner
复制第一步中的token粘贴。
5、Enter a description for the Runner, you can change this later in GitLab’s UI(添加Runner描述):
6、Please enter the gitlab-ci tags for this runner (comma separated):
这个相当于runner的标识,需要认真起名,因为同一个项目可以用不同tag的runner启动。Tag不同使用的runner会变化。
7、Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
一般都选择shell。
8、注册完成
三、注意
如果多个项目用同一个服务器上安装的runner,且多个项目同时提交运行runner的时候,则会按项目提交的顺序运行具体的CICD流程,其余的项目CICD流程会处于停滞状态。
运行gitlab-ci.yml中没写tag的流程,需要如图操作。(不推荐)
四、更改cicd执行权限为root
如果不更改的话,很多命令无法执行
编辑修改 /etc/systemd/system/gitlab-runner.service 文件,将 --user 修改为 root
重启服务
执行如下命令重启 gitlab-runer 服务
systemctl daemon-reloadsystemctl restart gitlab-runner
五、gitlab-ci.yml文件ssh执行不了
如果登录失败,则在最后面加上<< remotessh
ssh root@XXXX << remotessh
六、删除runner
每一个项目都对应有一个runner,删除操作如图所示,点进需要删除runner的项目中。
七、后端项目.gitlab-ci.yml文件编写示例
在后端项目的根目录下新建一个名为.gitlab-ci.yml的文件,如图:
内容:
stages:- build- deploy- sonarqube-check#测试# 定义安装包的存放位置和Tomcat服务器的地址的变量,便于后续部署使用.
variables:CIDEMO_PACKAGE_DIR: '/home/gitlab-runner/packages'SERVER_IP_ADDRESS: 'root@192.168.0.23'SERVER_HOME_DIR: '/home/citc/test'##编译和测试
build:tags:- wgtagstage: buildbefore_script:- echo "开始打包"after_script:- echo "打包结束"script:- mvn clean package -Dmaven.test.skip=true- rm -rf $CIDEMO_PACKAGE_DIR/test.jar- cp -a target/test.jar $CIDEMO_PACKAGE_DIR/test.jarsonarqube-check:tags:- wgtagstage: sonarqube-checkvariables:SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cacheGIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis taskcache:key: "${CI_JOB_NAME}"paths:- .sonar/cachescript: - mvn verify sonar:sonar -Dsonar.projectKey=test_sys_backend_hivemqclient_Aassasas1ZtbIXauvX -Dsonar.login=$SONAR_TOKENallow_failure: trueonly:- master # or the name of your main branch #打包任务:
deploy:tags:- wgtagstage: deployscript:- echo '准备将最新的jar包复制、保存到192.168.0.23服务器下.'- scp $CIDEMO_PACKAGE_DIR/test.jar $SERVER_IP_ADDRESS:$SERVER_HOME_DIR- ssh root@192.168.0.23 << remotessh- cd $SERVER_HOME_DIR#先删除容器,再删除镜像,直接删除运行中的容器的镜像会产生虚悬镜像- docker rm -f test-cicd- docker rmi -f test-cicd:1.0- docker build -t test-cicd:1.0 .- docker run -d --name test-cicd -p 1008:1088test-cicd:1.0
注意:rm -rf node_modules是删除原有的前端依赖包,rm -rf package-lock.json是删除原有的依赖版本文件,不然可能依赖下载会有问题。
九、gitlab-cicd运行结果查看
点击status
点击具体的job则会显示执行的日志。
十、为何配置免密
1、如果gitlab-runner和部署服务的服务器不同,则使用命令切换到另外一台服务器前,必须配置免密登录,不然会导致部署失败。
2、yml文件中stage执行的顺序则是stage定义的顺序(从上到下)
3、yml文件中编写命令请先删除容器,再删除镜像,直接删除运行中的容器的镜像会产生虚悬镜像
十一、视频学习(仅供参考)
kk 2022-10-18 20-40-47-gitlab-ci-cd-后部分-整体流程_哔哩哔哩_bilibili
十二、gitlab-ci.yml配置详解
关键字 | 是否必须 | 描述 |
script | 必须 | 定义Runner需要执行的脚本或命令 |
image | 非必须 | 需要使用的docker镜像,请查阅该文档 |
services | 非必须 | 定义了所需的docker服务,请查阅该文档 |
stage | 非必须 | 定义了工作的场景阶段,默认是test |
type | 非必须 | stage的别名,不赞成使用 |
variables | 非必须 | 在job级别上定义的变量 |
only | 非必须 | 定义哪些git引用(分支)适用该job |
except | 非必须 | 定义了哪些git引用(分支)不适用该job |
tags | 非必须 | 定义了哪些runner适用该job(runner在创建时会要求用户输入标签名来代表该runner) |
allow_failure | 非必须 | 允许任务失败,但是如果失败,将不会改变提交状态 |
when | 非必须 | 定义job什么时候能被执行,可以是on_success,on_failure,always或者manual |
dependencies | 非必须 | 定义了该job依赖哪一个job,如果设置该项,你可以通过artifacts设置 |
artifacts | 非必须 | 所谓工件。。就是在依赖项之间传递的东西,类似cache,但原理与cache不同 |
cache | 非必须 | 定义需要被缓存的文件、文件夹列表 |
before_script | 非必须 | 覆盖在根元素上定义的before_script(如果写在某一个阶段中,则在此阶段脚本执行前会执行;如果独立于每个阶段,则是在每个阶段运行前都会运行) |
after_script | 非必须 | 覆盖在根元素上定义的after_script(如果写在某一个阶段中,则在此阶段脚本执行后会执行;如果独立于每个阶段,则是在每个阶段运行后都会运行) |
environment | 非必须 | 定义让job完成部署的环境名称 |
retry | 非必须 | 定义job失败后的自动重试次数 |
更多描述:gitlab-ci配置详解(二)_gitlab ci dependencies-CSDN博客