• Gitlab-Ci运行原理:

由以下两个模块组成
gitlab-ci server
gitlab-ci-runner
其中,gitlab-ci server负责调度、触发Runner,以及获取返回结果. 而gitlab-ci-runner则是主要负责来跑自动化CI(测试,编译,打包等)。

基本流程是: 用户提交代码->检查是否有.gitlab-ci.yml文件->如果无,则结束;-> 如果有,则调用runner执行脚本->获取返回的结果。

1. 登录Gitlab
前提: gitlab 已经部署完成并能登录,runner已部署完成
版本:

2. 创建一个Project
创建好project后,就有了该project的URL。

3.注册runner
注册命令:
gitlab-ci-multi-runner register
#引导会让你输入gitlab的url,输入自己的url,例如http://gitlab.example.com/
#引导会让你输入token,去相应的项目下找到token,例如ase12c235qazd32
#引导会让你输入tag,一个项目可能有多个runner,是根据tag来区别runner的,输入若干个就好了,比如web,hook,deploy
#引导会让你输入executor,这个是要用什么方式来执行脚本,图方便输入shell就好了

4.添加.gitlab-ci.yml文件
注:在项目根目录增加YAML格式的CI脚本文件.gitlab-ci.yml

stages:
- build
- deploy
build:
stage: build
script:
- ./build.sh
tags:
- udacs_prod
deploy:
stage: deploy
script:
- ./deploy.sh
tags:
- udacs_prod

注: 这里的标签与创建的runner标签需要保持一致

5.启动runner

检查runner的状态:
gitlab-ci-multi-runner verify
Running in system-mode.
Verifying runner... is alive runner=70c3d017
Verifying runner... is alive runner=f27021ba

重启所有runner:
gitlab-ci-multi-runner run

重启单个runner:
gitlab-ci-multi-runner run-single --url http://IP:port/ --token runnerToken --executor shell

6. 上传代码
第一次上传:
Step1: 复制代码到本地
git clone http://IP:port/**.git
Step2: 进入代码目录
cd udacs-mp
Step3: 新建一个文件
touch README.md
Step3:添加到仓库
git add .
Step4:添加注释
git commit -m "init by 20180105"^C
Step5:提交代码到matser分支(只有一个分支时,默认是matser)
git push -u origin master
Username for 'http://IP:port/**.git': 
Password for 'http://IP:port/**.git':
Counting objects: 2224, done.
Delta compression using up to 24 threads.
Compressing objects: 100% (1977/1977), done.
Writing objects: 100% (2224/2224), 169.63 MiB | 4.62 MiB/s, done.
Total 2224 (delta 507), reused 0 (delta 0)
remote: Resolving deltas: 100% (507/507), done.
To  'http://IP:port/**.git': 
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

非第一次提交:
Step1:执行命令git add --all,将所有文件都添加到仓库中,如果想添加某一个文件,则将后面的--all换成你要提交的文件名即可。:
git add build.sh deploy.sh
Step2:需要将增加的文件commit到仓库里去,执行命令git commmit -m "注释语句":
git commit -m "*.sh"
[master f242b06] *.sh
Committer: root <root@localhost.localdomain>
Step3:此时还没完,还要将commit的代码push到远程分支,由于我们本地只有master分支,所以我们可以直接执行命令git push
 git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Username for 'http://IP:port/**.git': 
Password for 'http://IP:port/**.git': 
Counting objects: 5, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 861 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To  'http://IP:port/**.git': 
43a928a..f242b06 master -> master

提交完成后,就会自动触发一次CI部署了。

重启gitlab:
/etc/httpd/conf/httpd.conf

  • 问题定位

问题1: 启动runner时报错信息:
 gitlab-ci-multi-runner run
Starting multi-runner from /etc/gitlab-runner/config.toml ... builds=0
Running in system-mode.

Configuration loaded builds=0
Metrics server disabled
WARNING: Checking for jobs... failed runner=70c3d017 status=couldn't execute POST against http://IP/api/v4/jobs/request: Post http://IP/api/v4/jobs/request: dial tcp IP:80: getsockopt: connection refused
WARNING: Checking for jobs... failed runner=f27021ba status=502 Bad Gateway
WARNING: Checking for jobs... failed runner=70c3d017 status=couldn't execute POST against http://I/api/v4/jobs/request: Post http://IP/api/v4/jobs/request: dial tcp IP:80: getsockopt: connection refused

原因是:修改端口后,默认端口不再是80,需要修改runner的配置信息

问题2: gitlab-ci runner自动执行脚本时,提示脚本权限不够。
原因是: 直接在gitlab的project上添加的脚本,是root权限,应该修改为gitlab-runner权限。 修改办法,先删掉文件,然后在客户端添加脚本,确认权限后,再commit到服务端。

参考资料:
https://www.jianshu.com/p/2b43151fb92e

使用Gitlab实现自动化部署与持续集成的更多相关文章

  1. 【补充】Gitlab 部署 CI 持续集成

    上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...

  2. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  3. Jenkins+Gitlab+Ansible自动化部署(三)

    接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...

  4. 使用gitlab构建基于docker的持续集成(三)

    使用gitlab构建基于docker的持续集成(三) gitlab docker aspnetcore 持续集成 构建发布思路: aspnetcore 下的dockerfile编写 发布docker- ...

  5. Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成

    <SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...

  6. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

  7. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  8. 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

  9. 容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

随机推荐

  1. Gym 101981J - Prime Game - [数学题][线性筛+分解质因数][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem J]

    题目链接:http://codeforces.com/gym/101981/attachments 题意: 令 $mul(l,r) = \prod_{i=l}^{r}a_i$,且 $fac(l,r)$ ...

  2. Golang自定义包导入

    # 文件Tree project -/bin -/pkg -/src -main.go -/test -test1.go -test2.go main.go package main import ( ...

  3. 在CentOS 7.6上安装VNC Server

    停止并禁用防火墙 systemctl stop firewalld.service systemctl disable firewalld.service 安装vnxserver yum instal ...

  4. mysql 用户及权限

    永远不要给任何人(除了MySQL root帐户)访问 数据库中的 user表mysql!这很关键. mysql.user表存放所有用户的主机,用户名,密码,权限.直接修改表中信息,需flush pri ...

  5. Hibernate 补充 ManyToOne、OneToMany、OneToOne的使用例

    1.前言      Hibernate 为程序员提供一种级联操作,在编写程序时,通过 Hibernate 的级联功能可以很方便的操作数据库的主从表的数据, 我们最常用的级联是级联保存和级联删除.   ...

  6. spring datasource 使用 proxool

    XmlWebApplicationContext使用的xml配置如下: <?xml version="1.0" encoding="UTF-8"?> ...

  7. 八、UIViewController们之间的协作——Segue

    概述 正所谓“一生二,二生三,三生万物”,1个UIViewController没什么花样,多个UIViewController相互协作就有了各式各样丰富多彩的APP.但是UIViewControlle ...

  8. 抓取html 生成图片

      <!DOCTYPE html>   <html>   <head>   <script type="text/javascript" ...

  9. vue安装,router-link的一些属性,用法,tag active-class,to,replace,exex等等

    第一步:$ npm install -g vue-cli 第二部:$ vue init webpack my-projectName 下面内容转载自:https://www.cnblogs.com/c ...

  10. linux下视频转gif

    title: linux下视频转gif date: 2017-11-23 16:55:26 tags: linux categories: linux 安装ffmpeg ffmpeg是一套非常强大的音 ...