• 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. jmeter安装与环境变量配置

    因jmeter是java开发的,要想运行java开发的程序,必须先下载JDK一.jdk 1.下载jdk  jdk下载地址:https://www.oracle.com/technetwork/java ...

  2. javascript 窗口宽高滚动

    //不加window IE不支持 console.info(window.screenLeft);//IE支持火狐不支持 console.info(window.screenX);//火狐支持,IE不 ...

  3. 单片机小白应该如何学习stm32的一些实践心得!

    嵌入式搬砖道路上的大三狗一枚,撑死算个初学者吧.才学有限,下面仅仅是本人对STM32学习的一点心得与建议,希望对题主有帮助吧. 心得:本人当初学习STM32的时候有一些跟风的因素,自以为学的芯片越多就 ...

  4. gcc update in centos to 6.3 by scl

    CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ...

  5. Linux之cat的使用

    基本介绍 工作原理 从标准输入读入要 cat 的文件列表,然后逐个打开,读入文件内容,再将内容输出到标准输出上. 使用场景 一次显示整个文件 从键盘创建一个文件 将几个文件合并为一个文件 将一个或多个 ...

  6. LwIP协议栈规范翻译——摘要目录

    摘要 LwIP是一种TCP/IP协议栈的实现.LwIP协议栈专注于减少内存的使用和代码的大小,使LwIP适用于嵌入式系统中在有限的资源下能够使用小型的客户机.为了减少处理和内存的需求,LwIP使用裁剪 ...

  7. 005-mac下Java开发工具安装,idea,maven,git,node

    1.idea 官网下载:https://www.jetbrains.com/idea/download/#section=mac 1.1.双击安装即可. 1.2.打开程序,激活,网络搜索lanyu 1 ...

  8. sap 软件架构

    1:

  9. spring-boot 速成(2) devtools之热部署及LiveReload

    JRebel热部署插件相信很多人都知道,但是这是一款商业插件,spring-boot框架也提供了类似的功能,即:devtools,关键是免费的! 使用方法如下: 一.添加 devtools依赖 dep ...

  10. 2019.04.13 python基础

    第一节    主要讲python背景  没什么要注意的  了解记住概念就好 python官网  python.org  自带shell  可以运行python代码 在IDLE中怎么运行代码 新建文本  ...