Advertisement

持续集成与持续交付

阅读量:

git工具使用

秘籍:

Git - Bookhttps://git-scm.com/book/zh/v2安装git工具:

安装完Git之后,要做的第一件事就是设置你的用户名和邮件地址;这一点很重要,因为每一个Git提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改

如果使用了--global选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git都会使用那些信息;当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有--global选项的命令来配置

获取git仓库

##.git子目录含有初始化Git仓库中所有的必须文件,这些文件是Git仓库的骨干;但在这个时候,我们仅仅是做了一个初始化的操作,项目里的文件还没有被跟踪

git命令的使用

##如果有一个尚未进行版本控制的项目目录,想要用Git来控制它,那么首先需要进入到该项目目录中

##创建版本控制对象文件README.md并检查当前文件状态

##跟踪新文件;只要在Changes to be committed这行下面的,就说明是已暂存状态;如果此时提交,那么该文件在运行git add时的版本将被留存在后续的历史记录中;你可能会想起之前我们使用git init后就运行了git add <files> 命令,开始跟踪当前目录下的文件;git add命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件

##提交文件版本更新;在此之前,请务必确认还有什么已修改或新建的文件还没有git add过, 否则提交的时候不会记录这些尚未暂存的变化;这些已修改但未暂存的文件只会保留在本地磁盘,所以,每次准备提交前,先用git status看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令;-m参数指定提交说明

##撤消对文件的修改,文件会还原成上次提交时的样子


##新添加的未跟踪文件前面有??标记,新添加到暂存区中的文件前面有A标记,修改过的文件前面有M标记;输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态;例如上面的状态报告显示:README文件在工作区已修改但尚未暂存,而lib/simplegit.rb文件已修改且已暂存;Rakefile文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分

##忽略文件

----------

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表,通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等;在这种情况下,我们可以创建一个名为.gitignore的文件,列出要忽略的文件的模式;来看一个实际的.gitignore例子:

第一行告诉Git忽略所有以.o.a结尾的文件;一般这类对象文件和存档文件都是编译过程中出现的;第二行告诉Git忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如Emacs)都用这样的文件名保存副本;此外,你可能还需要忽略log,tmp或者pid目录,以及自动生成的文档等等,要养成一开始就为你的新仓库设置好.gitignore文件的习惯,以免将来误提交这类无用的文件

文件.gitignore的格式规范如下:

所有空行或者以 # 开头的行都会被 Git 忽略

可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中

匹配模式可以以(/)开头防止递归

匹配模式可以以(/)结尾指定目录

要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反

所谓的glob模式是指shell所使用的简化了的正则表达式;星号(*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个a,要么匹配一个b,要么匹配一个c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有0到9的数字);使用两个星号(**)表示匹配任意中间目录,比如a/**/z可以匹配 a/za/b/za/b/c/z等;我们再看一个.gitignore文件的例子:

----------

##跳过使用暂存区域;-a选项使本次提交包含了所有修改过的文件,这很方便,但是要小心,有时这个选项会将不需要的文件添加到提交中

##git checkout撤销删除文件



##取消暂存的文件;HEAD是当前分支引用的指针,它总是指向该分支上的最后一次提交,这表示HEAD将是下一次提交的父结点;通常,理解HEAD的最简方式就是将它看做该分支上的最后一次提交 的快照

##git移除文件

##查看提交历史

##版本回退

##查看已暂存和未暂存的修改;git diff 命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容;git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动,所以有时候你一下子暂存了所有更新过的文件,运行git diff后却什么也没有,就是这个原因

##若要查看已暂存的将要添加到下次提交里的内容,可以用git diff --staged命令,这条命令将比对已暂存文件与最后一次提交的文件差异(--staged和--cached是同义词)

##重命名文件

gitee远程仓库

在gitee网站创建账户并登陆

##生成ssh密钥

##在gitee端配置server21主机生成的公钥

##在gitee端创建仓库

##在server21主机端添加远程仓库


##上传本地项目至远程仓库;-u指定默认上游分支



##只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,git push server21-git master 命令才能生效;当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝,你必须先抓取他们的工作并将其合并进你的工作后才能推送

##克隆远程仓库;git clone 命令会自动设置本地master分支跟踪克隆的远程仓库的master分支(或其它名字的默认分支)

##如果你使用clone命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以“origin”为简写

gitlab代码仓库

gitlab软件可以搭建私有代码仓库,而github的私有仓库是收费的;虽然这两个平台都提供了私人仓库的功能供个人和企业用户使用,即使两个公司的数据库很安全,但很多企业是采用内网进行办公和传输数据,如果通过内网和外网这两个公司服务器进行代码和相关敏感数据的传输,传输途中容易被不法分子获取到数据,从而造成数据泄露;故出于成本和安全性考量,多数企业会选择使用gitlab软件搭建自己私有的公司范围内的代码仓库

gitlab安装

官网:

Iterate faster, innovate together|GitLabhttps://about.gitlab.com/软件下载(官方下载慢,推荐使用国内镜像站点):

Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/软件安装:

##官方推荐安装环境

##安装gitlab-ce

##配置gitlab访问地址并重载服务

##登陆gitlab进行语言偏好设置,修改密码等

gitlab使用

##gitlab常用命令

##创建新项目

##配置ssh连接密钥

##克隆gitlab仓库到本地

jenkins持续集成

Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要;Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行

CI(Continuous integration持续集成):持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试

CD(Continuous Delivery持续交付):是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中

软件下载:

Jenkins 的安装和设置https://www.jenkins.io/zh/download/国内镜像站:

Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /jenkins/redhat/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhatjdk软件下载:

Java Archive Downloads - Java SE 11https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html安装jenkins:

##安装JDK,配置java环境

##安装jenkins

##daemonize依赖包下载

##哦或,启动jenkins访问时报错了;看图猜测大概是java环境的问题

##搞定!成功访问到jenkins页面

##????wtf?

##升级完jdk后,又显示同样的报错

##解决方案

jenkins的使用

##创建新项目时报错

##在gitlab端添加jenkins主机server22的ssh公钥

##在jenkins端添加server22主机的ssh私钥

##报错解决

##指定分支

##配置构建触发器

##配置构建步骤

##点击测试构建;Git提交代码到gitlab,jinkens轮询检测到代码仓库的变更,触发构建

##查看构建输出

##jenkins主机的git工作目录

jenkins结合gitlab

gitlab自动触发jenkins

##jenkins安装gitlab插件

##创建构建触发器

##gitlab端配置webhooks

##出现以上报错

##进行以上设置,重新添加webhook

##推送事件进行测试

##触发构建

##向gitlab仓库推送更改

##触发构建

jenkins结合docker

Jenkins自动构建docker镜像,并上传至harbor仓库

##安装docker插件


##添加构建步骤

##触发构建


##成功构建

##创建新项目并配置

##对jenkins用户进行权力下放




##由于test项目的构建而成功触发docker项目的构建

##编辑index.html文件再次push以触发test项目的构建

##docker项目也成功触发构建

jenkins agent

##配置ssh插件

##添加全局凭据

##配置jenkins远程连接主机

##配置docker项目的构建步骤


##test项目的构建成功触发docker项目的构建

##安装ssh agent插件

##agent节点安装git工具和jenkins并启动

##配置添加agent节点

##成功添加agent节点

##触发构建



##成功构建,容器运行在节点上

jenkins结合ansible

##在jenkins主机配备epel源,安装ansible

##在gitlab创建名称为ansible的新项目

##拉取仓库到本地

##在gitlab端配置ansible受控主机清单

##在ansible受控节点创建远程连接用户并做权力下放

##配置ansible主机jenkins用户与ansible受控节点远程登录用户的ssh免密登陆功能



##推送本地项目至gitlab



##创建新的jenkins构建项目

##使用test参数构建测试失败,原因时此构建操作被调度到了agent节点上,而此agent节点本身就作为ansible的受控端且为安装ansible软件


##down掉agent节点重新构建test成功


##以生产环境参数prod构建也没有任何问题

##jenkins构建时的工作目录

jenkins的用户管理

##创建jenkins普通用户test、prod

##以test用户登陆时仍可以访问到所有jenkins项目;因为其默认的安全认证策略是“登陆用户可做任何事”

##安装基于角色分配权限的安全插件

##配置jenkins使用基于角色分配权限的安全认证策略

##仪表板会生成一个jenkins角色的模块

##创建全局角色

##此时使用test、prod用户登陆jenkins是没有任何权限

##对用户进行角色绑定

##创建指定项目角色

##对项目角色绑定用户

##此时普通用户登录仍然没有任何权限,可见全局角色的优先级高于项目角色的优先级

##去掉全局角色的用户绑定后使用普通用户登陆仍然没有任何权限,可以用户要想访问jenkins,必须要有全局范围内的指定权限

##配置全局角色的权限并重新进行用户角色绑定

##普通用户成功访问到具有相关权限的项目

全部评论 (0)

还没有任何评论哟~