约定Jenkins构建脚本
对于Jenkins的使用,我感觉只用到其中一小部分功能,但也就是这一小部分功能,也推动了整个CI/CD的过程,Jenkins的使用方式有很多中,可能我用到的只是其中一种,但是已经满足我的需求,便不再贪婪,本次要约定好Jenkins中的脚本规则,对于我的整个生成流水线来讲,约定至高无上,遵从约定,或许会出现错误,但出现的几率肯定低于不遵从约定,随意设计好的多。

一、Jenkins安装及项目配置
1、Jenkins安装
在以前的博客中已经介绍过Jenkins的安装,我使用的是在Docker中安装Jenkins,利弊明显,在容器中安装方便,但是也带来一些问题,如不能很好的和Docker Machie结合使用,如果想在Jenkins脚本中分发服务到其他主机上,那必须要在Jenkins中额外安装SSH插件。而在主机上直接安装Jenkins,则步骤要多一点,需要安装Java环境等操作,但是可以在Jenkins中直接使用Docker Machine的功能,直接将服务分发到Swarm服务器集群中,这便带来了优势。
Docker中完成Jenkins安装:https://www.cnblogs.com/CKExp/p/9536864
2、Jenkins集群搭建
对于Jenkins的作用需要重申重要一点就是,在我的整个生成流水线中Jenkins的最大目的是担任奶妈角色,也就是镜像的创建,甚至整个Jenkins集群的目的都是镜像的创建,在聊天时发现有人在自己的每一台机器上安装Jenkins,然后搭建Jenkins集群,然后将构建任务下发至子节点中并构建完毕后生成服务,我的思路在刚开始使用Jenkins时甚至也是这样,但是慢慢的我发现不对,这整个思路就是荒谬,难不成我的每一台机器上都得安装Jenkins,逐步探索,总结出来就是,Jenkins只是奶妈,最终目的只是镜像生产者。
Jenkins集群搭建过程:https://www.cnblogs.com/CKExp/p/9541137.html
3、Jenkins中新建项目
在我的生成流水线中,Jenkins的主要职责便是将代码仓库中的代码拉取过来,完成镜像的构建,而对于Jenkins中,构建项目,有一些需要设置的地方,如Git地址,凭证,构建时间,构建脚本等。
Jenkins中新建项目:https://www.cnblogs.com/CKExp/p/9940479.html
二、约定Jenkins的构建脚本
利用在构建Jenkins脚本时加入的Docker Compose工具,可以在脚本构建时生成多个镜像,且可以有依赖关系,方便相互关联的服务部署。
1、利用Docker Compose中的参数 -f 指定项目中的compose.yaml文件,这个文件的位置在之前约定项目结构中设置好了,在docker文件夹下,对于docker compose,会将这两个yaml文件合并为一个,因此,可以设置多个yaml文件,用于不同的作用。通过制定-p 参数来设置项目名称,down 参数将删除指定的镜像、服务、容器、网关等,对于构建镜像的命令,可以使用up命令或是build命令,两者区别是,使用up命令时会在本机上生成指定镜像的容器,而build命令则只负责构建镜像。
约定项目文件结构:https://www.cnblogs.com/CKExp/p/9940457.html
#!/bin/bash
# 获取短版本号 GITHASH=`git rev-parse --short HEAD`
docker-compose -f ./docker/docker-compose.yml -f ./docker/docker-compose.override.yml -p multimap down --rmi local --remove-orphans
docker-compose -f ./docker/docker-compose.yml -f ./docker/docker-compose.override.yml -p multimap up -d --build
# docker-compose -f ./docker/docker-compose.yml -f ./docker/docker-compose.override.yml -p multimap build
注意:如果不指定-p 参数,则会使用默认文件夹名,在此处为docker文件夹名,则会带来一系列问题,如对于默认网关名称,镜像名称等,都是使用docker开头,这就导致多个项目会发生冲突,都是使用docker开头的网关,多个项目只能一个有效,因此约定每个项目在指定-p参数时以项目名称为主。
2、镜像构建完毕,将镜像推送到镜像仓库中,指定仓库地址,用户名和密码(我这里使用的是腾讯云的镜像仓库,如果使用的私有仓库或其他云的,则需要替换),可以利用docker-compose提供的push命令,将docker compose中生成的镜像都推送到镜像仓库中。
echo ---------------Push-Images...------------------
docker login -u=xxx用户名xxx -p=xxx密码xxx ccr.ccs.tencentyun.com
docker-compose -f ./docker/docker-compose.yml -f ./docker/docker-compose.override.yml push
3、(可选)如果需要将创建服务到Swarm集群(或是k8s中),也可以利用Jenkins完成,如果是将Jenkins安装在宿主机上,则可以使用如下命令创建服务:
首先执行登录仓库功能:
docker-machine ssh host1 docker login -u xxx用户名xxx -p xxx密码xxx ccr.ccs.tencentyun.com
创建服务,指定服务内外端口,指定镜像,如需指定更多信息,可以查看命令帮助,指定完毕服务创建会从镜像仓库中获取最新的镜像,我使用的是latest标签,如果是生产环境需要打上数字标签,方便应用程序版本管理:
docker-machine ssh host1 docker service create \
--with-registry-auth \
--name multimapService
--publish published=,target= \
ccr.ccs.tencentyun.com/sassassin/multimap:latest
更新服务,指定镜像名称,仍然是该镜像仓库地址,如果显示没有镜像,重新使用docker login登录,然后执行命令(登录命令很关键)。
docker-machine ssh host1 docker service update --image ccr.ccs.tencentyun.com/sassassin/multimap:latest xxxService
4、对于构建过程中生成的无效镜像等,可以利用Jenkins来定时删除,不建议在项目构建完毕去发起命令删除,原因在于,多个项目构建时,一个项目构建完毕,另一个项目正在构建过程中,可能会产生中间镜像,但这镜像或许是有作用的,当构建完毕的项目执行镜像删除时,会发生删除错误,中间镜像正在被使用,因此,最好是单独设置一个任务去定时删除无效镜像
Jenkins定时删除无效镜像:https://www.cnblogs.com/CKExp/p/9900539.html
至此,Jenkins在我的整个生成流水线的过程算是完整了,最后在指明一点,Jenkins在我的整个生成流水线中,最大的角色就是镜像生产者(奶妈)。
本文地址:https://www.cnblogs.com/CKExp/p/9940467.html
欢迎关注微信订阅号,有新的文章将同步到订阅号中

2018-12-01,望技术有成后能回来看见自己的脚步
约定Jenkins构建脚本的更多相关文章
- Jenkins构建脚本中启动tomcat关键
一.启动tomcat 来源: http://blog.csdn.net/prisonbreak_/article/details/50749576(给出方法) http://veryyoung.me/ ...
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建
我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下: Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版 ...
- Jenkins构建完成之后运行脚本可以杀掉TomCat但是起不来的解决方法
Jenkins构建完成之后运行脚本可以杀掉TomCat但是起不来的解决方法 写了一个重启tomcat的脚本,让jenkins编译.打包.发布时调用.在本地写好重启tomcat的脚本后,本地执行脚本没有 ...
- 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本
小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...
- 用Vagrant创建Jenkins构建环境
这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...
- Jenkins 构建JavaHelloWorld
原文:http://www.cnblogs.com/itech/archive/2011/11/03/2234662.html 注意:我们知道Jenkins通过master/slave来支持分布式的j ...
- Gitlab自动触发Jenkins构建打包
一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...
- 基于Jmeter+maven+Jenkins构建性能自动化测试平台
一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...
随机推荐
- JS中的top是什么?
<iframe/>或者<frame>里面用主页面的东西,就是top.xxx如:<script> function func(){ ... };</script ...
- SOFA 源码分析 — 负载均衡和一致性 Hash
前言 SOFA 内置负载均衡,支持 5 种负载均衡算法,随机(默认算法),本地优先,轮询算法,一致性 hash,按权重负载轮询(不推荐,已被标注废弃). 一起看看他们的实现(重点还是一致性 hash) ...
- Unity3d Mecanim动画系统Animator学习笔记
1. unity3d Mecanim学习 Unity3d新版动画系统网上的介绍很多,但多是流水笔记,外人很难看明白,后来我 终于找到介绍的比较明白的两个作者,特别感谢.一个是58开发网的乐天老师,课 ...
- 谈谈Javascript异步代码优化
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 在实际编码中,我们经常会遇到Javascript代码异步执行的场景,比如ajax的调用.定时器的使用 ...
- REBEL IDEA热部署插件使用
启动 一.在IDEA 的Plugins中搜索Jrebel for intellij 插件 二.https://my.jrebel.com/account/how-to-activate 注册或者使用f ...
- Apache 、Tomcat、Nginx的区别
一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上.其属于应用服务器.Apache支持支持模块多,性能稳定,Apache本身是 ...
- 如何使用 toml 配置 SpaceVim
配置 SpaceVim 主要包括以下几个内容: 设置 SpaceVim 选项 启动/禁用模块 添加自定义插件 添加自定义按键映射以及插件配置 设置SpaceVim选项 原先,在 init.vim 文件 ...
- .NET Core使用微软官方类库实现汉字转拼音
一.NuGet包 拼音:Install-Package SimplifiedChinesePinYinConversion 简体-繁体互转:Install-Package TraditionalChi ...
- JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
- 并发库应用之十一 & 阻塞队列的应用
队列包含固定长度的队列和不固定长度的队列,队列的规则就是:先进先出.固定长度的队列往里放数据,如果放满了还要放,阻塞式队列就会等待,直到有数据取出,空出位置后才继续放:非阻塞式队列不能等待就只能报错了 ...