centos安装Gitlab Runner

参考网站:https://docs.gitlab.com/runner/install/linux-repository.html

https://docs.gitlab.com/runner/register/index.html

1、添加官方gitlab官方仓库???这一步操作不明白什么意思,反正安装官网来先。

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2、安装最新版本的gitlab runner,当然,也可以安装特定版本,参照官方连接

yum install gitlab-runner

3、然后就可以注册信息到gitlab了。

gitlab-runner register

输入后会让你输入gitlab ci 协调者的url,这个是需要在安装的gitlab上面找的,步骤:设置=>Overview=>Runners然后就可以看到了,参考下图

4、然后让你输入token,这里也看的到。

5、再然后让你输入gitlab-ci runner的描述信息,自己看着填吧,以后也可以在gitlab页面上进行修改

6、然后添加一个tag,以后也可以在页面修改,也可以不输入调过去

7、选择executor运行方式,官网使用的docker,其他教程都选择shell,选择docker需要选择一个镜像什么的,我使用shell

这样就算是完成了,然后你可以在gitlab上面看到这个runner,设置=>Overview=>Runners,runner有公有还私有的区别。

然后我写一个.gitlab-ci.yml文件在项目跟目录提交测试下情况。

stages:
- deploy
deploy:
  stage: deploy
  script:
  - cat /etc/redhat-release
  only:
  - master
  tags:
  - testtag1

可以在仓库中看CI job执行的情况,进入你项目的仓库,按照左侧菜单展开,即可看到执行的任务,红框圈的按钮点击可以校验你的.gitlab-ci.yml文件的正确性。

选择其中一个pipeline点击进去,可以看到执行的效果,如下图所示。

 

关键字 是否必须 描述
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失败后的自动重试次数

其中有些配置加入我自己的理解:

下面这个artifacts配置项意思就是,将生成的jar包上传到gitlab上面,可以用gitlab ui上面显示,并下载。

artifacts:
  paths:
  - target/aa.jar

 

踩坑:

1、注意编写.gitlab-ci.yml文件“-”符号后面一定得加个空格,不然命令会报错,虽然输出控制台显示正确命令,但是执行是不成功的。

2、代码推送到gitlab上之后,一直是pending状态,要等很久才pick到一个runner来执行,这个现象一般是只在gitlab上删除的runner,但是没有在runner的配置文件中删除对应的配置信息,手动删除即可。/etc/gitlab-runner.config.toml,删除只剩下你需要的即可,然后重新启动下runner:gitlab-ruuner restart

3、我在.gitlab-ci.yml文件中写了一段执行docker打包镜像的脚本,执行的时候总是出问题说是没有权限执行。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/build?buildargs=%7B%7D&buildbinds=null&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=overduestatic&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

然后我在前面步骤写了一个脚本,拿到runner的用户是那个命令(whoami),然后赋予该用户权限。

sudo groupadd docker
sudo gpasswd -a gitlab-runner docker
sudo service docker restart(或者systemctl start docker)

据说这样就可以了,但是我这里还是不行,继续找资料,说给docker软件赋权限那么试一试吧:chmod a+rw /var/run/docker.sock

虽然还报错,但是不再是权限问题了。

container_linux.go:247: starting container process caused "chdir to cwd (\"/dockerdir\") set in config.json failed: not a directory"

这个问题,是我自己写的脚本问题。我自己研究,正常到这里都可以执行了。

 

最后贴一下我的Dockerfile和.gitlab-ci.yml文件内容,第一个是Dockerfile,第二个是.gitlab-ci.yml

FROM openjdk
ADD target/overduestatic.jar /dockerdir/overduestatic.jar
WORKDIR /dockerdir
CMD ["java","-jar","/dockerdir/overduestatic.jar"]
stages:
- test
- build
- docker
test1:
  stage: test
  script:
  - cat /etc/redhat-release
  - whoami
  only:
  - master
  tags:
  - testtag1
build2:
  stage: build
  tags:
  - testtag1
  only:
  - master
  script:
  - mvn package
  artifacts:
    paths:
    - target/overduestatic.jar
docker3:
  stage: docker
  tags:
  - testtag1
  only:
  - master
  script:
  - docker build -t overduestatic .

 

.gitlab-ci.yml参考地址:

https://docs.gitlab.com/ce/ci/yaml/README.html

https://segmentfault.com/a/1190000011890710

https://blog.csdn.net/ujm097/article/details/80794740

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章