• 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. spark streaming集成flume

    1. 安装flume flume安装,解压后修改flume_env.sh配置文件,指定java_home即可. cp hdfs jar包到flume lib目录下(否则无法抽取数据到hdfs上): $ ...

  2. Python-----redis数据库

    # redis数据库:基于内存的高性能key-value数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存:#缺点:1.数据库容量受到物理内存的限制, ...

  3. sqlserver开启远程访问

    1.通过本地连接数据库,选择数据库——右键——属性 2.在连接选项勾选“允许远程连接到此服务器” 3.打开sqlserver配置管理器 4.到sqlserver网络配置——XXX的协议——TCP/IP ...

  4. Linux是cat、tail、head查看文件任意几行的数据

    Linux是cat.tail.head查看文件任意几行的数据 一.使用cat.tail.head组合 1.查看最后100行的数据 cat filename | tail -n 100 2.查看100到 ...

  5. bugfree3.0.1-导入excel测试用例

    大多数项目里只用BugFree做缺陷管理工具,其实还可以通过该工具导入测试用例,记录测试结果,最后获得统计结果. 难点 1.导入文件要求XML格式: 2.一般我们的测试用例都是用excle文件存取,很 ...

  6. vue--vuex详解

    安装vuex npm install vuex --save Vuex 什么是Vuex?  官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的 ...

  7. 011-MAC 设置环境变量path的几种方法

    一.概述 首先要知道你使用的Mac OS X是什么样的Shell,使用命令 echo $SHELL 如果输出的是:csh或者是tcsh,那么你用的就是C Shell. 如果输出的是:bash,sh,z ...

  8. sap 软件架构

    1:

  9. Mac下搭建solr搜索引擎与PHP扩展开发(下)

    [接上一篇]https://www.cnblogs.com/rxbook/p/10716759.html [下载php的solr扩展] 现在开始使用php和solr交互了,所以必需安装solr扩展,下 ...

  10. C#文件流的读写

    1.文件流写入的一般步骤 1.定义一个写文件流 2.定义一个要写入的字符串 3.完成字符串转byte数组 4.把字节数组写入指定路径的文件 5.关闭文件流 2.文件流读入的一般步骤 1.定义一个读文件 ...