iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >gitlab CI脚本编写
  • 303
分享到

gitlab CI脚本编写

脚本gitlabCI 2023-01-30 21:01:28 303人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

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



--结束END--

本文标题: gitlab CI脚本编写

本文链接: https://www.lsjlt.com/news/178964.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • gitlab CI脚本编写
    从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。 而且随着 GitLab 的升级,GitLab ...
    99+
    2023-01-30
    脚本 gitlab CI
  • Python 脚本编写
    学习内容: Python 安装和环境设置 运行和修改 Python 脚本 与用户输入交互 处理异常 读写文件 导入本地、标准和第三方模块 在解释器中进行实验 检查计算机是否安装了 Python ? 在终端窗口输入如下指令,并...
    99+
    2023-01-31
    脚本 Python
  • 怎么编写Python脚本
    本篇内容介绍了“怎么编写Python脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Streamlit是第一个专门针对机器学习和数据科学团...
    99+
    2023-06-02
  • catalog.sql脚本怎么编写
    这篇文章给大家介绍catalog.sql脚本怎么编写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。        前面介绍了如何通过手工创建数据库,...
    99+
    2023-06-06
  • BAT脚本怎么编写
    这篇文章将为大家详细讲解有关BAT脚本怎么编写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们...
    99+
    2023-06-08
  • linux如何编写shell脚本
    编写Linux的shell脚本可以使用任何文本编辑器,如vi、nano、gedit等。以下是编写shell脚本的一般步骤:1. 打开...
    99+
    2023-09-15
    linux shell
  • 如何编写Linux Shell脚本
    这篇文章主要为大家展示了“如何编写Linux Shell脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编写Linux Shell脚本”这篇文章吧。代码风格规范开头有“蛇棒”所谓sheba...
    99+
    2023-06-16
  • 如何编写两个vbs脚本
    本篇内容主要讲解“如何编写两个vbs脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写两个vbs脚本”吧!Set objNetwork = CreateOb...
    99+
    2023-06-08
  • 如何编写一个vbs脚本
    这篇文章主要讲解了“如何编写一个vbs脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写一个vbs脚本”吧!代码如下:Set WshShell= WScript....
    99+
    2023-06-09
  • 如何编写SQLMap的Tamper脚本
    本篇内容介绍了“如何编写SQLMap的Tamper脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!测试环境最新版某狗测试方法安全狗其实是比...
    99+
    2023-07-05
  • centos中怎么编写shell脚本
    在CentOS中编写Shell脚本主要有以下几个步骤: 打开终端,创建一个新文件,例如script.sh,可以使用touch s...
    99+
    2023-10-23
    centos shell
  • Linux 脚本编写基础知识
    1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须放在文件的第一行):#!/bin/sh  符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我...
    99+
    2022-06-04
    基础知识 脚本 Linux
  • Python编写淘宝秒杀脚本
    目录添加火狐浏览器插件安装geckodriverpython代码代码整体思路使用方法最近想抢冰墩墩的手办和钥匙圈,但是同志们抢的速度太快了,无奈,还是自己写脚本吧。 添加火狐浏览器插...
    99+
    2022-11-13
  • python编写文件统计脚本
    python编写文件统计脚本 思路:用os模块中的一些函数(os.listdir()、os.path.isdir()、os.path.join()、os.path.abspath()等) 实现功能:显示多级目录,以及自己要找的具体文件类型...
    99+
    2023-01-30
    脚本 文件 python
  • shell脚本编写之初级版
    1.  shell脚本的执行顺序是从上而下的,面向过程。2.  文件名称格式: xxx.sh3.  文件内容的第一行: #!/bin/bash4.  shell脚本就是将命令全部融合在一起5. &nb...
    99+
    2023-06-06
  • linux中如何编写shell脚本
    在Linux中,可以使用任何文本编辑器编写Shell脚本。以下是编写Shell脚本的一般步骤: 打开终端并创建一个新的文本文件,...
    99+
    2023-10-23
    linux shell
  • 如何编写Linux桌面脚本
    小编给大家分享一下如何编写Linux桌面脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Screenlet 入门您需要安装一些程序以便开始开发 screenle...
    99+
    2023-06-16
  • 如何编写Shell脚本注释
    本篇内容介绍了“如何编写Shell脚本注释”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单选注释以“#”开头的行就是注释,会被解释器忽略...
    99+
    2023-06-09
  • Shell脚本编程入门编写教程
    这篇文章主要讲解了“Shell脚本编程入门编写教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本编程入门编写教程”吧!例子一:绘制特殊图形代码如下:#!/bin/bash&nb...
    99+
    2023-06-09
  • 浅谈CI脚本异常退出问题定位
    背景 在CI脚本中,使用类似如下脚本进行项目编译的计时,但在执行过程中,有时会出现CI脚本(命名为ci.sh)未完全执行的情况: #!/bin/bash -e sleep_time=$1 star...
    99+
    2022-06-04
    浅谈 脚本 异常
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作