我的编程空间,编程开发者的网络收藏夹
学习永远不晚

gitlab CI脚本编写

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

gitlab CI脚本编写

从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。 而且随着 GitLab 的升级,GitLab CI 变得越来越强大,本文将介绍如何使用 GitLab CI 进行持续集成。

一些概念
在介绍 GitLab CI 之前,我们先看看一些持续集成相关的概念。
参考链接

https://segmentfault.com/a/1190000006120164

CI配置详解参考

https://segmentfault.com/a/1190000011881435


环境介绍:

develop分支: IP: 192.168.1.92   系统:centos7.4 web目录/develop/

test分支:  IP: 192.168.1.136 系统:centos7.4 web目录/www/

master分支:  IP: 192.168.1.61  系统:centos7.4 web目录/www/

gitlab服务器:   IP: 192.168.1.37  系统:centos7.4

ssh端口都是22


gitlab服务器,需要安装gitlab,docker

docker的镜像列表如下:

kb-rsync

docker.io/gitlab/gitlab-runner

docker.io/alpine

其中kb-rsync是自己制作的,后续文章会讲到


192.168.1.92 需要安装dns服务器


.gitlab-ci.yml完整代码如下:

#镜像地址,通过docker images查看
image: kb-rsync

#构建阶段
stages:
  #需要执行的流程,按照顺序来,就是deploy
  - deploy

#定义环境变量
variables:
  #项目名
  PROJECT_NAME: kuaidihelp_monitor
  
  #develop(开发分支),服务器IP地址
  DEV_ADDRES_IP: "192.168.1.92"
  #服务器ssh端口
  DEV_ADDRES_PORT: "22"
  #项目访问域名
  DEV_DOMAIN: "http://${PROJECT_NAME}.baidu.com"

  #test(测试分支)
  TEST_ADDRES_IP: "192.168.1.136"
  TEST_ADDRES_PORT: "22"
  TEST_DOMAIN: "http://${PROJECT_NAME}.baidu.com"

  #demo(预发布/灰度 分支)
  #DEMO_ADDRES_IP: "10.20.1.179"
  #DEMO_ADDRES_PORT: "2020"

  #prod(线上master分支)
  PROD_ADDRES_IP: "192.168.1.61"
  PROD_ADDRES_PORT: "22"
  PROD_DOMAIN: "http://${PROJECT_NAME}.baidu.com"

  #gitlab服务器端口号
  GITLAB_ADDRES_PORT: "22"
  #gitlab访问地址
  GITLAB_ADDRES_IP: "testgitlab.baidu.com"

#docker执行脚本前的动作
before_script:
  #创建ssh目录
  - mkdir -p ~/.ssh
  #读取Settings->CI/CD->Secret variables 添加的公钥变量
  - echo "$ID_RSA_PUB" > ~/.ssh/id_rsa.pub
  #读取私钥变量,并设置权限为600(必须要600,否则报错)
  - echo "$ID_RSA" > ~/.ssh/id_rsa && chmod 0600 ~/.ssh/id_rsa
  #收集主机公钥,写入known_hosts,避免出现Are you sure you want to continue connecting (yes/no)? 
  #注意:ecdsa是针对centos7系统的,如果是centos6 需要使用rsa
  #以下命令是将各个环境的主机公钥写入docker容器的~/.ssh/known_hosts文件
  - ssh-keyscan -H -t ecdsa -p $DEV_ADDRES_PORT $DEV_ADDRES_IP >> ~/.ssh/known_hosts
  - ssh-keyscan -H -t ecdsa -p $TEST_ADDRES_PORT $TEST_ADDRES_IP >> ~/.ssh/known_hosts
  #因为目前还没有灰度环境,这里先注释掉
  #- ssh-keyscan -H -t rsa -p $DEMO_ADDRES_PORT $DEMO_ADDRES_IP >> ~/.ssh/known_hosts
  - ssh-keyscan -H -t ecdsa -p $PROD_ADDRES_PORT $PROD_ADDRES_IP >> ~/.ssh/known_hosts
  - ssh-keyscan -H -t ecdsa -p $GITLAB_ADDRES_PORT $GITLAB_ADDRES_IP >> ~/.ssh/known_hosts

#deploy_dev(开发)任务
deploy_dev:
  stage: deploy
  script:
    #将gitlab仓库代码同步到开发服务器,排除.git目录,代码以gitlab仓库为准,不匹配的,直接删除掉。
    #将代码同步到测试服务器的/develop/目录下
    - rsync -avztH -e "ssh -p $DEV_ADDRES_PORT" --exclude ".git" --delete ./ $DEV_ADDRES_IP:/develop/${PROJECT_NAME}/
  only:
    #当一个分支被push上来
    - branches
  tags:
    #对应了注册runner的时候的tags
    - dev
  except:
    #except是排除的意思,排除了master,test,除了develop以外的分支
    - master
    - test
    - /^(?!develop).*$/
  #environment 定义让job完成部署的环境名称
  environment:
    name: dev
    url: $DEV_DOMAIN

#deploy_test(测试)任务
deploy_test:
  stage: deploy
  script:
    #将代码同步到测试服务器的/www/目录下
    - rsync -avztH -e "ssh -p $TEST_ADDRES_PORT" --exclude ".git" --delete ./ $TEST_ADDRES_IP:/www/${PROJECT_NAME}/
  #只针对哪个分支
  only:
    #只针对于test分支
    - test
  tags:
    #对应了注册runner的时候的tags
    - vpc
  environment:
    name: test
    url: $TEST_DOMAIN

#deploy_demo:
#  stage: deploy
#  script:
#    - rsync -avztH -e "ssh -p $DEMO_ADDRES_PORT" --exclude ".git" --delete ./ $DEMO_ADDRES_IP:/www/${PROJECT_NAME}/
#  when: manual
#  only:
#    - demo
#  tags:
#    - vpc

#deploy_prod(上线)任务
deploy_prod:
  stage: deploy
  script:
    ##将代码同步到线上服务器的/www/目录下
    - rsync -avztH -e "ssh -p $PROD_ADDRES_PORT" --exclude ".git" --delete ./ $PROD_ADDRES_IP:/www/${PROJECT_NAME}/
  #when(什么时候执行) manual表示手动执行job的时候触发
  when: manual
  only:
    #表示只有打了tags之后,才会触发
    - tags
  tags:
    - vpc
  environment:
    name: prod
    url: $DOMAIN
  #允许生成失败。失败的构建不会导致提交状态。默认是true,这里表示不允许失败
  allow_failure: false

实现的功能:

当代码提交到develop分支的时候,自动将develop分支代码同步到测试服务器的/develop目录

当代码提交到test分支的时候,自动将test分支代码同步到测试服务器的/www目录

当代码提交到master分支的时候,必须要先手动打tag,然后点击CI/CD的tags任务

图片.png

等到任务完成之后,自动将master分支代码同步到线上服务器的/www目录


kb-rsync的Dockerfile

# mkdir -p /opt/docker/kb-rsync
# vim /opt/docker/kb-rsync/Dockerfile

内容如下:

FROM docker.io/alpine

RUN echo "#aliyun" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" >> /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
RUN apk update
RUN apk add openssh-client rsync

开始制作镜像

# docker build -t kb-rsync /opt/docker/kb-rsync


由于CI执行的任务依赖于runner,下一篇文章详细介绍,如何注册runner

http://www.py3study.com/Article/details/id/141.html



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

gitlab CI脚本编写

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

gitlab CI脚本编写

从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。 而且随着 GitLab 的升级,GitLab
2023-01-30

Python 脚本编写

学习内容:Python 安装和环境设置运行和修改 Python 脚本与用户输入交互处理异常读写文件导入本地、标准和第三方模块在解释器中进行实验检查计算机是否安装了 Python ?在终端窗口输入如下指令,并按回车python --versi
2023-01-31

怎么编写Python脚本

本篇内容介绍了“怎么编写Python脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Streamlit是第一个专门针对机器学习和数据科学团
2023-06-02

catalog.sql脚本怎么编写

这篇文章给大家介绍catalog.sql脚本怎么编写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 前面介绍了如何通过手工创建数据库,在创建数据库之后执行了脚本$ORACLA_HOME/rdbms/adm
2023-06-06

BAT脚本怎么编写

这篇文章将为大家详细讲解有关BAT脚本怎么编写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们
2023-06-08

Ubuntu Service脚本编写示例

使用 Linux 时经常用到 ` service mysql restart ` 等命令, 方便进行服务的操作, 具体的服务是怎么写的呢,通过以下示例将了解以下内容。

linux如何编写shell脚本

编写Linux的shell脚本可以使用任何文本编辑器,如vi、nano、gedit等。以下是编写shell脚本的一般步骤:1. 打开一个文本编辑器,创建一个新文件,文件扩展名通常是.sh,表示这是一个shell脚本。2. 添加#!/bin/
2023-09-15

如何编写Linux Shell脚本

这篇文章主要为大家展示了“如何编写Linux Shell脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编写Linux Shell脚本”这篇文章吧。代码风格规范开头有“蛇棒”所谓sheba
2023-06-16

使用 JavaScript 编写 Shell 脚本

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。它既是一种命令语言,又是一种程序设计语言。

如何编写两个vbs脚本

本篇内容主要讲解“如何编写两个vbs脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写两个vbs脚本”吧!Set objNetwork = CreateObject("Wscript.N
2023-06-08

linux中如何编写shell脚本

在Linux中,可以使用任何文本编辑器编写Shell脚本。以下是编写Shell脚本的一般步骤:打开终端并创建一个新的文本文件,例如my_script.sh。在文件的第一行添加Shebang,指定要使用的Shell解释器。例如,要使用Bash
2023-10-23

Golang 能用来编写脚本吗?

用 Golang 编写脚本是否可行?近年来,Golang(也称为Go)作为一种强大的编程语言,在各个领域都有着广泛的应用。它的并发性能优越、编译速度快、静态类型检查等特点使得它成为了许多开发者的首选语言。但是,对于一些需要快速运行、执行简
Golang 能用来编写脚本吗?
2024-02-27

如何编写Linux桌面脚本

小编给大家分享一下如何编写Linux桌面脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Screenlet 入门您需要安装一些程序以便开始开发 screenle
2023-06-16

centos中怎么编写shell脚本

在CentOS中编写Shell脚本主要有以下几个步骤:打开终端,创建一个新文件,例如script.sh,可以使用touch script.sh命令创建一个空白文件。使用文本编辑器(如vi或nano)打开脚本文件,例如使用vi script.
2023-10-23

在 Swift 中编写脚本:Git Hooks

在本例中,我使用了 commit-msg 钩子,它能够在当前提交信息生效前修改此信息。钩子由一个参数调用,该参数是指向包含用户输入的提交消息的文件的路径。这意味着,为了改变提交消息,我们只需要从文件中读取、修改其内容,然后写回调用挂钩的文件
SwiftGitHooks2024-12-13

Shell脚本编程入门编写教程

这篇文章主要讲解了“Shell脚本编程入门编写教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本编程入门编写教程”吧!例子一:绘制特殊图形代码如下:#!/bin/bash MA
2023-06-09

shell脚本编写之初级版

1. shell脚本的执行顺序是从上而下的,面向过程。2. 文件名称格式: xxx.sh3. 文件内容的第一行: #!/bin/bash4. shell脚本就是将命令全部融合在一起5. 定义变量 shell脚本的变量是以:k
2023-06-06

如何编写Shell脚本注释

本篇内容介绍了“如何编写Shell脚本注释”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单选注释以“#”开头的行就是注释,会被解释器忽略
2023-06-09

Linux 脚本编写基础知识

1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须放在文件的第一行):#!/bin/sh  符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录