热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Gitlab持续集成(.gitlabci.yml)

从7.12版本开始,GitLabCI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。以下通过示例讲解.gitl

从7.12版本开始,GitLab CI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。

stages

stages用来定义可以被job调用的stages。stages的规范允许有灵活的多级pipelines。stages中元素的顺序决定了对应job的执行顺序:

  • 相同stage的job是并行执行的;
  • 下一个stage的job在前一个stage的job成功完成后才开始执行;
  • 如果.gitlab-ci.yml中没有定义stages,那么stages默认定义为build、test和deploy;
  • 如果一个job没有指定stage,那么这个任务会分配到test stage。
variables

variables用来定义变量,全局变量作用于所有job,也可以在指定的job中定义变量(优先级高于全局变量)
如果在job中想禁用全局定义的变量,可通过variables: {}定义一个空的哈希值。

GitLab CI/CD内置变量

variables 变量值
CI_JOB_NAME 对应的job_name
GIT_STRATEGY 指定git获取代码的方式(clone,fetch,none)
jobs

jobs用来定义了一组作业,其中必须包含script语句。

job.stage(默认:test

job中指定的stage必须是stages中存在的元素

job.tags

指定该job所允许运行的Runner,必须在注册Runner时设置Runner的tag

job.allow_failure

用于指定该job允许执行失败,则如果执行失败也不会影响下一个stage的执行。

job.script

script是job中必须指定的语句,指定Runner所要执行的命令

job.before_script、job.after_script

指定script执行前/后所执行的命令,也可定义在全局模式,则在所有job中的script执行前/后都会执行。

job.artifacts

用于指定job执行成功后,将会被发送到Gitlab中的文件,且默认情况下job之间会根据stage的优先级自动下载之前所有stage中的artifacts。

  • artifacts.paths:必选
  • artifacts.name:指定artifact的名称,同时Gitlab上下载的文件名即为artifact_name.zip
  • artifacts.when:指定artifact上传到Gitlab的条件(on_success[默认],on_failure,always)
  • artifacts.expire_in:指定artifact的过期时间(默认为30天),使用keep可永久保存

job.dependencies

dependencies用于在不同的job之间指定在不同的job之间传递artifacts,dependencies: []可禁止该job下载artifacts

job.only、job.except

onlyexcept是两个参数用分支策略来限制jobs构建

  • onlyexcept可同时使用。如果在一个job配置中同时存在,则同时有效;
  • onlyexcept可以使用正则表达式;
  • onlyexcept允许使用特殊的关键字:branchestagstriggers

job.environment

environment用于定义job部署到指定的运行环境中。

  • environment.name:必选,指定environment名称
  • environment.url:可选,指定environment对应的URL,将在指定的environment页面中添加一个链接按钮指向该URL

特殊的YAML特性

Hidden keys(jobs)

如果想临时disable某个job,不必注释整个job定义的行,只需在job name前加一个.即可

.compile_centos:
  stage: build_centos
  tags:
    - centos
  script:
    - echo "##### build library"

Anchors

锚点可用于在文件中复制或继承配置,一般与Hidden keys(jobs)提供的job模版搭配使用。

.job_template: &job_definition  #job中定义一个anchor:job_definition
  image: ruby:2.1
  services:
    - postgres
    - redis
test1:
  <<: *job_definition           #合并anchor:job_definition中的模版内容
  script:
    - test1 project
test2:
  <<: *job_definition
  script:
    - test2 project

最终实现的效果如下:

.job_template:
  image: ruby:2.1
  services:
    - postgres
    - redis
test1:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test1 project
test2:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test2 project
Skipping jobs

如果你的commit信息中包含[ci skip]或者[skip ci],不论大小写,那么这个commit将会创建但是jobs也会跳过。


example:

以下示例为编译nginx的上传模块nginx-upload并测试验证上传功能,验证成功后将自动将编译好的文件打包通过curl上传到指定的文件服务器。其中只有在非master的branches中提交代码才会执行build和test的stage,只有在打tag后才会执行deploy,且需要手动在gitlab上执行。

variables:
  DIR: nginx
  TOPNODE: package

.function: &function |
  function build() {
    echo "execute function:build"
    chmod +x auto/configure
    sh build.sh
  }

  function changelog() {
    echo "execute function:changelog"
    git log --graph -n 3  --name-status --pretty="%h -[%cd] - <%an> %s" > CHANGELOG
  }

  function test() {
    echo "execute function:test"

    sudo \cp modules/nginx-upload-module-master/nginx.conf /etc/nginx/nginx.conf
    sudo sed -i ‘/error_log/,/working_directory/d‘ /etc/nginx/nginx.conf
    if [ -f /run/nginx.pid ];then sudo nginx -s reload;else sudo nginx;fi
    sudo rm -rf /tmp/{0,1,2,3,4,5,6,7,8,9} && sudo mkdir /tmp/{0,1,2,3,4,5,6,7,8,9} && sudo chown -R nginx. /tmp/{0,1,2,3,4,5,6,7,8,9}
    sudo echo nginx_upload > test && curl -F "filename=@test" http://localhost/upload
    sudo find /tmp/{0,1,2,3,4,5,6,7,8,9} -type f -exec grep nginx_upload {} \; 
  }

  function artifacts() {
    echo "execute function:artifacts"
    URL="https://xxx.com/upload?dir=${DIR}/${VERSION}&override=1&topNode=${TOPNODE}"

    echo "push the artifacts:nginx_${VERSION}.tar.gz to $URL"
    tar zcf /tmp/nginx_${VERSION}.tar.gz --exclude=".git*" --exclude=build .
    curl -F "filename=@/tmp/${DIR}_${VERSION}.tar.gz" "$URL"

    echo "push the CHANGELOG to $URL"
    curl -F "filename=@CHANGELOG" "$URL"
  }

  function deploy() {
    echo "execute function:deploy"
  }

  function clean() {
    echo "execute function:clean"
    if [ -f /run/nginx.pid ];then sudo kill `cat /run/nginx.pid`;fi
    sudo rm -rf /tmp/{0,1,2,3,4,5,6,7,8,9} /tmp/nginx_${version}.tar.gz
  }

#########only the section above need to be modify #################
before_script:
  - VERSION=`head -n1 version`
  - *function

stages:
  - build
  - test
  - deploy

build:
  stage: build
  only:
    - branches
  except:
    - master
  script:
    - build
    - changelog

test:
  stage: test
  variables:
    GIT_STRATEGY: none
  only:
    - branches
  except:
    - master
  script:
    - test
    - artifacts
    - clean

.job_template: &deploy_template
  stage: deploy
  variables:
    GIT_STRATEGY: none
  only:
    - tags
  script:
    - deploy
    - delete
  when: manual

staging:
  <<: *deploy_template
  environment:
    name: staging

production:
  <<: *deploy_template
  environment:
    name: production

Gitlab持续集成-(.gitlab-ci.yml)


推荐阅读
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • 大数据应用实例:电视收视率分析企业项目实操第二篇
    本文继续探讨大数据在电视收视率分析中的应用,详细介绍了如何在CentOS系统中进行防火墙管理。针对CentOS 6.5及更早版本,提供了具体的命令操作步骤,包括停止防火墙服务和禁用防火墙启动。此外,还深入讨论了这些操作对数据传输和系统安全的影响,为实际项目实施提供了宝贵的技术参考。 ... [详细]
  • 优化后的标题:数据网格视图(DataGridView)在应用程序中的高效应用与优化策略
    在应用程序中,数据网格视图(DataGridView)的高效应用与优化策略至关重要。本文探讨了多种优化方法,包括但不限于:1)通过合理的数据绑定提升性能;2)利用虚拟模式处理大量数据,减少内存占用;3)在格式化单元格内容时,推荐使用CellParsing事件,以确保数据的准确性和一致性。此外,还介绍了如何通过自定义列类型和优化渲染过程,进一步提升用户体验和系统响应速度。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 本文深入探讨了原型模式在软件设计中的应用与实现。原型模式通过使用已有的实例作为原型来创建新对象,而不是直接通过类实例化。这种方式不仅简化了对象的创建过程,还提高了系统的灵活性和效率。具体来说,原型模式涉及一个支持克隆功能的接口或基类,子类通过实现该接口来提供具体的克隆方法,从而实现对象的快速复制。此外,文章还详细分析了原型模式的优缺点及其在实际项目中的应用场景,为开发者提供了实用的指导和建议。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • 高效批量文件重命名软件
    开发了一款基于Python的高效批量文件重命名软件,并集成了wxWidgets图形用户界面,使用cxfreeze将其打包为独立的可执行文件(exe)。该工具适用于需要频繁处理大量文件的用户,能够显著提高文件管理效率。详细使用说明包含在软件压缩包内。开发环境为Python 2.7和wxWidgets 3.0,运行环境要求兼容Windows系统。 ... [详细]
  • 前端技术实现调用摄像头进行拍照功能
    在公司项目中,为了实现调用摄像头进行拍照的功能,我们深入研究了HTML5的相关技术。尽管Java在许多方面表现出色,但在这一场景下,HTML5的灵活性和易用性更胜一筹。本文将分享具体的代码设计和实现细节,帮助开发者快速掌握这一功能。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 新年伊始,正是学习的最佳时机。本文全面解析了CK1957-Zookeeper的核心概念与实践技巧,旨在帮助初学者快速掌握这一深度学习工具。通过详细的理论讲解和实际操作示例,读者可以更好地理解Zookeeper的工作原理及其在分布式系统中的应用。无论是新手还是有一定基础的学习者,都能从中受益匪浅。 ... [详细]
  • 探究Oracle数据库字符集编码的详细方法与实践
    本文深入探讨了Oracle数据库字符集编码的详细方法与实践。首先,通过执行 `SELECT USERENV('language') FROM DUAL;` 查询服务端字符集编码。其次,通过在注册表中搜索 `NLS_LANG` 参数来查看客户端字符集编码。此外,文章还介绍了如何在不同场景下正确配置和转换字符集,以确保数据的一致性和完整性。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
author-avatar
王耀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有