约定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构建了一套性能自动化测试平台 ...
随机推荐
- TCP分组交换详解
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- python爬虫入门(七)Scrapy框架之Spider类
Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...
- Java开源生鲜电商平台-订单表的设计(源码可下载)
Java开源生鲜电商平台-订单表的设计(源码可下载) 场景分析说明: 买家(餐馆)用户,通过APP进行选菜,放入购物车,然后下单,最终支付的流程,我们称为下单过程. 买家可以在张三家买茄子,李四家买萝 ...
- ElasticSearch本地调测环境构建
ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git 1:安装JVM(JVM1.8以上) 2:安装gradle(3.3以上 ...
- 洛谷 P1069 解题报告
P1069 细胞分裂 题目描述 \(Hanks\)博士是\(BT\) (\(Bio-Tech\),生物技术) 领域的知名专家.现在,他正在为一个细胞实验做准备工作:培养细胞样本. \(Hanks\) ...
- Python + Appium 环境搭建
---恢复内容开始--- Appium自动化公司内部测试培训1-环境搭建 课程目的 一.Python + Appium 环境搭建 课程内容 1 安装前准备工作 搭建环境所需要的安装文件已经下载好 ...
- js相关
记录工作中用到的js实用方法: 1. 判断包含:indexOf "https".indexOf("http") 包含结果为0,不包含结果为-1: 通常用(&qu ...
- IntelliJ IDEA maven 构建简单springmvc项目
环境: apache-tomcat-8.5.15 jdk1.8.0_172 IDEA 建立一个maven-webapp项目:Create New Project 后点击next 然后next 可以选择 ...
- 跨域cors方法(jsonp,document.domain,document.name)及iframe性质
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- Linux下gcc和g++的区别
首先编写了第一个C++程序,Hello,world! #include <iostream> using namespace std; void main() ...{ cout < ...