约定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构建了一套性能自动化测试平台 ...
随机推荐
- Download and Install Apache Zookeeper on Ubuntu
http://www.techburps.com/misc/download-and-install-apache-zookeepr/36 In previous article of this Bi ...
- Ubuntu编译安装crtmp-server
下载源码 从GitHub上下载:https://github.com/j0sh/crtmpserver.git 编译安装 apt-get install cmake apt-get install l ...
- STL-Deque 源码剖析
G++ ,cygnus\cygwin-b20\include\g++\stl_deque.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Comp ...
- meta的用法
META标签,是HTML语言head区的一个辅助性标签.在几乎所有的page里,我们都可以看 到类似下面这段html代码: -------------------------------------- ...
- Mego(05) - Mego Tools使用教程
前言 使用过EntityFramework6的朋友应该都知道EF中的PowerTools这个工具可以帮助初学者或者开发人员快速构建一个EF的数据上下文,并且可以很直观的看到实体之间的关系.不过目前升级 ...
- Spring源码阅读笔记
前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...
- Eclipse插件:mybatis generator的使用步骤
一.首先,安装eclipse插件 Help--Eclipser Marketplace中查找:Mybatis Generator 1.3.5安装 二.新建project New--other--查找如 ...
- eclipse中javadoc给项目生成api文档
步骤 1.打开java代码,编写JavaDoc 注释,只有按照java的规范编写注释,才能很好的生成API文档,javadoc注释与普通注释的区别为多一个*(星号).普通代码注释为/*XXX*/,而j ...
- PHP访问数据库配置通用方法
提取一种对数据库配置的通用方式 目的是通过通用类访问配置文件的方式,提供对数据库连接的动态获取和设置,使开发时和生产应用时都能够提供灵活的.简化的.解耦的操作方式.比如在配置文件中配置好两套数据库访问 ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...