对于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构建脚本的更多相关文章

  1. Jenkins构建脚本中启动tomcat关键

    一.启动tomcat 来源: http://blog.csdn.net/prisonbreak_/article/details/50749576(给出方法) http://veryyoung.me/ ...

  2. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  3. 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建

    我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下: Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版 ...

  4. Jenkins构建完成之后运行脚本可以杀掉TomCat但是起不来的解决方法

    Jenkins构建完成之后运行脚本可以杀掉TomCat但是起不来的解决方法 写了一个重启tomcat的脚本,让jenkins编译.打包.发布时调用.在本地写好重启tomcat的脚本后,本地执行脚本没有 ...

  5. 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本

    小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...

  6. 用Vagrant创建Jenkins构建环境

    这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...

  7. Jenkins 构建JavaHelloWorld

    原文:http://www.cnblogs.com/itech/archive/2011/11/03/2234662.html 注意:我们知道Jenkins通过master/slave来支持分布式的j ...

  8. Gitlab自动触发Jenkins构建打包

    一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...

  9. 基于Jmeter+maven+Jenkins构建性能自动化测试平台

      一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...

随机推荐

  1. mysql-入门

    创建数据库 Create database 数据库名字 [库选项]; 创建数据库 create database mydatas charset utf8; 查看数据库 show databases; ...

  2. vscode 停用插件自动更新

  3. hive 分组排序,topN

    hive 分组排序,topN 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rankpartition by:类似hiv ...

  4. 源码安装xadmin及使用

    xadmin是django的第三方后台 我们也可以使用pip来安装,但是推荐使用源码安装. 因为有些新功能以及发布在GitHub上,但是还未发布到pypi上,我们就可以提取使用这些功能. 一.安装 1 ...

  5. 《T-SQL查询》读书笔记Part 3.索引的基本知识

    索引优化是查询优化中最重要的一部分,索引是一种用于排序和搜索的结构,在查找数据时索引可以减少对I/O的需要:当计划中的某些元素需要或是可以利用经过排序的数据时,也会减少对排序的需要.某些方面的优化可以 ...

  6. HBuilder 打包流程

    1.运行HBuilder---百度搜索HBuilder,官网下载安装包,解压,运行HBuilder.exe.注册账号,并登陆 2.新建app---在左边右键,选择新建APP,或者,点击中间的新建app ...

  7. 读《图解HTTP》有感-(返回结果的HTTP状态码)

    写在前面 HTTP状态码是由服务端产生,用于告诉客户端,服务端处理结果的编码 正文 1.状态码的作用是什么?具有什么特征? 状态码的作用是当客户端向服务器发送请求时,描述服务器的响应结果(如:服务器正 ...

  8. mysql导入数据中文乱码_ubuntu

    1.在ubuntu中mysql的部分编码格式不是utf-8,故在导文件的时候会出现中文乱码,Windows中编码格式为gbk,因此要修改mysql的编码方式为utf-8. 2.查看MySQL编码格式: ...

  9. JSTL varStatus属性

    JSTL核心标签库中c:forEach 的 varStatus属性 varStatus属性  类型:String   描述:循环的状态信息,可以取值index\count\first\last\cur ...

  10. File文件的读写操作RandomAccessFile类

    1.Java提供了一个对文件随机访问的操作,访问包括读和写操作,该类名是RandomAccessFile,该类的读写是基于指针的操作. 2.RandomAccessFile在堆文件进行随机访问操作时有 ...