持续集成与交付

git必看秘籍:https://git-scm.com/book/en/v2/

一、git工具使用

GIT三种状态:已提交(commited),已修改(modified)和已暂存(staged)

  • 已修改表示您已更改文件,但尚未将其提交到数据库
  • 暂存意味着您已标记了当前版本的已修改文件,使之包含在下次提交的快照中
  • 提交意味着将数据安全地存储在本地数据库中。
    Git项目拥有的三个阶段:工作区,暂存区以及Git目录
    在这里插入图片描述
    1.文件的状态
[root@node5 demo]# vim readme.txt
[root@node5 demo]# git status -s   #  ??表示未添加
?? readme.txt
[root@node5 demo]# git add readme.txt 
[root@node5 demo]# git status -s  #A表示在暂存区
A  readme.txt
[root@node5 ~]# git config --global user.email "root@123"
[root@node5 ~]# git config --global user.name "sll"
[root@node5 ~]# cat .gitconfig    #在.gitconfig文件中查看使用者邮箱和名字
[user]
	email = root@123
	name = sll
[root@node5 demo]# git commit -m 'add readme.txt'  #提交
[master (root-commit) bda9802] add readme.txt
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt
[root@node5 demo]# git status -s  #提交完再看状态前面无字母


修改readme.txt文件
[root@node5 demo]# vim readme.txt 
[root@node5 demo]# git status  #查看未跟踪的文件
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   readme.txt
[root@node5 demo]# git checkout -- readme.txt   #还原
[root@node5 demo]# cat readme.txt   #查看文件还是原来的样子
hello world
[root@node5 demo]# vim readme.txt #再次修改
[root@node5 demo]# git status -s  #M在右,表示已修改,但未在暂存区
 M readme.txt
[root@node5 demo]# git add readme.txt
[root@node5 demo]# git status -s #M在左,已经被修改,并到达暂存区
M  readme.txt
[root@node5 demo]# vim readme.txt   #再次修改
[root@node5 demo]# git status -s   #表示在暂存区和当前目录都做了修改
MM readme.txt
[root@node5 demo]# git add readme.txt  #再次添加
[root@node5 demo]# git status -s
M  readme.txt
[root@node5 demo]# git commit -m 'changed readme.txt'  #提交
[master a2248e2] changed readme.txt
 1 file changed, 2 insertions(+)
[root@node5 demo]# git status -s

在这里插入图片描述
2.如何忽略文件

[root@node5 demo]# touch .a
[root@node5 demo]# mkdir test
[root@node5 demo]# git status -s
?? .a
[root@node5 demo]# touch test/file
[root@node5 demo]# git status -s
?? .a
?? test/
[root@node5 demo]# vim .gitignore  #编写文件,将不想显示的文件标记写进去
[root@node5 demo]# cat .gitignore 
.*
/test
[root@node5 demo]# git status -s  #已成功不显示
  1. git diff比较不同
    在这里插入图片描述
    4.文件的删除
    (1)rm ,可恢复


(2) git rm
在这里插入图片描述
常用命令:

git rm --cached readme.txt不在状态显示,本地并没有删除
git rm readme.txt移除文件
git mv reademe.txt readme重命名文件
git log,git log -p -2,git log --start ,git log --pretty=oneline查看提交历史
git reset HEAD readme.txt取消暂存的文件
git checkout – readme.txt撤销对文件的修改
git reflog ; git reset --hard efa267a版本回退

在这里插入图片描述

二、github建立一个仓库

在这里插入图片描述

[root@node5 demo]# git remote add origin git@github.com:Sunll121/demo.git
[root@node5 demo]# git remote -v
origin	git@github.com:Sunll121/demo.git (fetch)
origin	git@github.com:Sunll121/demo.git (push)
[root@node5 demo]# git push -u origin master  #现在不能上传,需要做一个公钥
The authenticity of host 'github.com (13.250.177.223)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? YES
Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
[root@node5 demo]# ssh-keygen
[root@node5 demo]# cd ~/.ssh
[root@node5 .ssh]# cat id_rsa.pub   #查看建立的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwFBaKdk4svqpC4hzP6alvQZVjQ3tfj7TMnQQrX5VDCYxhQcGGfckIPiu6ApYyteeNcBihGzSMySTshOBZn1aM8/URjRH7wrcGT5t0I3MSx1HHFNUFYW+NStRfsKcPMoU/lSEUTK62E2XDs2WrJDpGH8LzS4RfuETDQ8x8XPr8MjDw2WjaDaROmzaZ0qjf3z/0NUqpHgl23MtLHVUTMm3Ai7SybbM+1K0yhqTqiwZivo7x/jY/9W2uD3RtvuINnWJDzUEmXM+xiQi5OpT0vEUhS1c0S49UcIKNhOfvmAjLGQU89nRgspfArVOuIw7eh4r2db0kHhYbAXTYrBaZhUsx root@node5

将建立的公钥写进repository.
在这里插入图片描述
在这里插入图片描述
现在可以上传镜像到github
在这里插入图片描述
在这里插入图片描述
如果不小心把本地磁盘上的数据删除了,也可以远端clone。
在这里插入图片描述
在这里插入图片描述

三、gitlab代码仓库

部署:官方推荐至少4G内存

清华大学源下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el
[root@node5 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.8.5-ce.0.el7.x86_64.rpm
[root@node5 ~]# yum install -y curl openssh-server policycoreutils-python 
[root@node5 ~]# vim /etc/gitlab/gitlab.rb   #修改访问gitlab的地址
[root@node5 ~]# gitlab-ctl reconfigure      #重载服务,此时大概需要两分钟

在这里插入图片描述
常用命令:

gitlab-ctl start启动所有gitlab组件
gitlab-ctl stop停止所有gitlab组间
gitlab-ctl restart重启所有gitlab组件
gitlab-ctl status查看服务状态
gitlab-ctl reconfigure重载服务
gitlab-ctl tail查看日志

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在命令行clone仓库里的内容:

在这里插入图片描述

四、jenkis简介

持续集成Continuous Integration(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。持续集成的出现是为了配合敏捷开发(相对于瀑布开发)的速度和效率而产生的一个用于编译、测试、发布、部署的工具。

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

通俗一点儿说: (此段转载)
就是指对于开发人员的每一次代码提交,都自动地把Repository中所有代码Check out到一个空目录,并且自动运行所有Test Case。如果成功则接受这次提交,否则告诉所有人,这是一个失败的Revision。持续集成一般通过编写好的python等脚本,自动完成一系列集成所需要的步骤。从代码的check out, 构建项目工程,编译源代码,生成可执行包或安装文件,压缩打包,上传到公司或项目组的FTP等位置……

1 安装下载

官方下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.225-1.1.noarch.rpm

 [root@node7 ~]# rpm -ivh jdk-8u171-linux-x64.rpm 
[root@node7 ~]# rpm -ivh jenkins-2.225-1.1.noarch.rpm 
[root@node7 ~]# systemctl start jenkins  #开启

浏览器中输入:172.25.7.137:8080
在这里插入图片描述
注意:
若输入ip需要等待很久,则立马更换插件源,并重启服务

[root@node7 jenkins]# cd /var/lib/jenkins
[root@node7 jenkins]# vim hudson.model.UpdateCenter.xml  #更换插件源
		<?xml version='1.1' encoding='UTF-8'?>
		<sites>
		  <site>
		    <id>default</id>
		    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>  #更换为此源
		  </site>
		</sites>

查看本地密码输入浏览器:

[root@node7 jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword
dc0f1d23c508493ba51c8242419f8b3d

继续更新插件源:

[root@node7 jenkins]# cd updates/
[root@node7 updates]# pwd
/var/lib/jenkins/updates
[root@node7 updates]# ls
default.json  hudson.tasks.Maven.MavenInstaller
[root@node7 updates]# vim default.json 
[root@node7 updates]# sed -i.bak 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json 
[root@node7 updates]# ls
default.json  default.json.bak  hudson.tasks.Maven.MavenInstaller
[root@node7 updates]# vim default.json
[root@node7 updates]# sed -i 's/http:\/\/www.goole.com/https:\/\/www.baidu.com/g' default.json
[root@node7 updates]# systemctl restart jenkins

在这里插入图片描述

2 jenkins主动从gitlab拉取

创建一个新任务:选择自由模式
在node7上安装git,并查看node5的私钥添加credential凭据:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 gitlab主动触发jenkins

(1) 在jenkins上安装gitlab插件
在这里插入图片描述
在这里插入图片描述
(2)进test目录配置,更改构建触发器

在这里插入图片描述
(3)进gitlab更改网络外发请求
在这里插入图片描述
由于本人在做实验的时候这个一直展不开,故展开截图没有。换个浏览器可以展开了
在这里插入图片描述
(4)gitlab项目中的设置集成添加URL和Token信息【这两个信息在jenlins里的构建触发器里】
在这里插入图片描述
点击完在保存那里附近有test,可以测试push一下,在jenkins的构历史可以看到,在node7上的
/var/lib/jenkins/workspace目录下也可以看到。
在这里插入图片描述
在这里插入图片描述
真正建立文件测试。

[root@node5 demo]# touch file11
[root@node5 demo]# echo haha > file11
[root@node5 demo]# cat file11 
haha
[root@node5 demo]# git add file11
[root@node5 demo]# git commit -m 'file11'
[root@node5 demo]# git push origin master 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
edit dockerfile -> git push -> gitlab -> trigger -> jenkins -> docker engine -> build -> image -> push -> harbor

五、和docker打通交付

六、gitlab,jenkins,ansible整合

1.在gitlab新建仓库playbook

在这里插入图片描述
2.在node5上(gitlab)克隆新建的项目;编写playbook.yml文件;建立inventory

[root@node5 ~]# cd demo/
[root@node5 demo]# git clone git@172.25.7.135:root/playbook.git  #克隆新建的项目
	Cloning into 'playbook'...
	remote: Enumerating objects: 3, done.
	remote: Counting objects: 100% (3/3), done.
	remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
	Receiving objects: 100% (3/3), done.
[root@node5 demo]# ls
 playbook  README.md
[root@node5 demo]# cd playbook/
[root@node5 playbook]# ls
README.md
[root@node5 playbook]# vim playbook.yml
[root@node5 playbook]# mkdir inventory
[root@node5 playbook]# cd inventory/
[root@node5 inventory]# ls
[root@node5 inventory]# vim test
[root@node5 inventory]# vim prod

在这里插入图片描述
在这里插入图片描述
3. 在node7上(jenkins)用epel源下载ansible,并修改jenkins用户使其可以登录(由false—>bash)。
[root@node7 yum.repos.d]# yum install -y ansible
[root@node7 yum.repos.d]# vim /etc/passwd
在这里插入图片描述
4.在待部署主机node1和ndoe2上创建ansible用户,并修改密码,visudo赋予ansible超户权限。
在这里插入图片描述
在这里插入图片描述
同理,node1做同样操作。

5.在node2(jenkins)生成钥匙并传送将要部署的node1和node2。
[root@node7 yum.repos.d]# su - jenkins
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.在node1上编辑ansible.cfg。限制jenkins去node1和node2的时候以ansible用户身份,如果不加限制,则会以当前用户jenkins身份过去。

[root@node5 playbook]# vim ansible.cfg
	[defaults]
	remote_user = ansible
	[privilege_escalation]
	become=True
	become_method=sudo
	become_user=root
	become_ask_pass=False
[root@node5 playbook]# tree .  #查看当前目录结构
.
├── ansible.cfg
├── inventory
│   ├── prod
│   └── test
├── playbook.yml
└── README.md
[root@node5 playbook]# git add *  #添加
[root@node5 playbook]# git commit -m "add playbook"  #提交
[root@node5 playbook]# git push origin master   #上传

查看是否已经上传上:
在这里插入图片描述
7.在jenkins上新建一个项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构建完成后保存
在这里插入图片描述
查看控制台输出,success成功
在这里插入图片描述
【test】:node1和【prod】:node2已全部安装httpd

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值