持续集成与持续交付(git工具使用+gitlab代码仓库+jenkins持续集成)

git工具使用

简介

版本控制系同简介

本地版本控制系系统
在这里插入图片描述

集中化版本控制系统
在这里插入图片描述

分布式版本控制系统
在这里插入图片描述

git简介

Git特点:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

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

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

在这里插入图片描述

git安装

安装Git:

#yum install -y git

获取 Git 仓库通常有两种方式:
将尚未进行版本控制的本地目录转换为 Git 仓库。
从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

初始化版本库:

$ mkdir demo
$ git init
	Initialized empty Git repository in /home/git/demo/.git/ 
$ ls .git/
	branches  config  description  HEAD  hooks  info  objects  refs

git目录是git跟踪管理版本库的,没事别瞎溜达!

git使用

用户信息

$ git config --global user.name "wxh"
$ git config --global user.email yakexi007@westos.org

检查当前文件状态

$ git status
$ git status -s		//简化输出

状态简览

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

跟踪新文件

$ git add README

忽略文件

$ cat .gitignore

.* //忽略所有隐藏文件
/test //只忽略当前目录下的test文件
build/ //忽略任何目录下名为 build 的文件夹

查看已暂存和未暂存的修改

$ git diff

提交更新

$ git commit

跳过使用暂存区域

$ git commit -a -m 'added new benchmarks'

移除文件

$ git rm PROJECTS.md
$ git rm --cached README

重命名文件

$ git mv README.md README

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.md README
$ git rm README.md
$ git add README

查看提交历史

$ git log
$ git log -p -2
$ git log --stat
$ git log --pretty=oneline

取消暂存的文件

$ git reset HEAD README.md

撤消对文件的修改

$ git checkout -- README.md

版本回退:

$ git reflog
$ git reset --hard efa267a

在这里插入图片描述

远程仓库:注册github帐号,并新建一个仓库:

在这里插入图片描述

推送本地仓库内容到github:

$ git remote add origin https://github.com/westos007/git.git//关联远程仓库 $git push -u origin master` //第一次推送需要加 -u参数

使用https方式推送每次需要输入用户名和密码,如果不想麻烦的话采用ssh方式:

$ `ssh-keygen -t rsa -b 4096 -C "yakexi007@westos.org"

生成本地密钥,并上传公钥到github:

在这里插入图片描述

$ git remote -v
origin	https://github.com/westos007/git.git (fetch)
origin	https://github.com/westos007/git.git (push)
 
$ git remote rm origin
 
$ git remote add origin git@github.com:westos007/git.git

$ git remote -v 
origin	git@github.com:westos007/git.git (fetch)
origin	git@github.com:westos007/git.git (push)

$ git push origin master
克隆远程仓库:$ git clone git@github.com:westos007/gittest.git

在这里插入图片描述

gitlab代码仓库

gitlab安装

官网:https://about.gitlab.com/install/

软件下载(官方下载慢,推荐使用国内镜像站点)

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

软件安装: (官方推荐至少4G内存)

#yum install -y curl policycoreutils-python openssh-server
#yum install -y gitlab-ce-12.8.5-ce.0.el7.x86_64.rpm
#vim /etc/gitlab/gitlab.rb	
external_url 'http://172.25.0.11'		//访问gitlab的地址
#gitlab-ctl  reconfigure			//重载服务

登录gitlab:
http://172.25.0.11 //用户:root 第一次登录需要强制修改密码

常用命令:

gitlab-ctl start # 启动所有 gitlab 组件

gitlab-ctl stop # 停止所有 gitlab 组件

gitlab-ctl restart # 重启所有 gitlab 组件

gitlab-ctl status # 查看服务状态

gitlab-ctl reconfigure # 重载服务

gitlab-ctl tail # 查看日志

登录gitlab:

http://172.25.0.11 //用户:root 第一次登录需要强制修改密码
在这里插入图片描述
在这里插入图片描述

添加ssh密钥:
在这里插入图片描述

jenkins持续集成

jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

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

在这里插入图片描述

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

在这里插入图片描述

jenkins安装

软件下载:https://jenkins.io/zh/download/

国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安装jenkins:

#rpm -ivh jdk-8u171-linux-x64.rpm
#rpm -ivh jenkins-2.225-1.1.noarch.rpm
在这里插入代码片
#systemctl  start jenkins

访问: http://172.25.0.12:8080

使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword

安装默认插件即可,使用admin用户,登录后修改密码。

在这里插入图片描述

更新插件源:
#vim /var/lib/jenkins/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>

#cd /var/lib/jenkins/updates

#sed -i.bak 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
#sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述

在这里插入图片描述

jenkins使用在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加访问git仓库的私钥

在这里插入图片描述

定义轮询间隔,有更新时触发jinkens构建

在这里插入图片描述

构建选择执行shell命令

在这里插入图片描述
Git提交代码到gitlab,jinkens轮询检测到代码仓库的变更,触发构建。

在这里插入图片描述

gitlab自动触发jenkins(添加gitlab插件)

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

修改docker.sock权限,不然jenkins无法直接执行docker命令:

#chmod 777 /var/run/docker.sock

Jenkins使用tls方式连接docker构建主机
生成key和ca证书

#openssl genrsa -aes256 -out ca-key.pem 4096
#openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
生成server-key和csr文件(server3为dcker主机名)
#openssl genrsa -out server-key.pem 4096
#openssl req -subj "/CN=server3" -sha256 -new -key server-key.pem -out server.csr

可以使用ip地址方式进行tls连接

#echo subjectAltName = DNS:server3,IP:172.25.0.13,IP:127.0.0.1 >> extfile.cnf
#echo extendedKeyUsage = serverAuth >> extfile.cnf

#openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out server-cert.pem -extfile extfile.cnf

Jenkins使用tls方式连接docker构建主机

安装docker证书:
#cp ca.pem server-cert.pem server-key.pem /etc/docker/
#cp /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.service
#vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376

#systemctl daemon-reload 
#systemctl restart docker

#netstat -antlp |grep :2375
生成客户端key和证书
#openssl genrsa -out key.pem 4096

#openssl req -subj '/CN=client' -new -key key.pem -out client.csr

#echo extendedKeyUsage = clientAuth >> extfile.cnf

#openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out cert.pem -extfile extfile.cnf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加docker交付任务

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

jenkins结合ansible

添加ansible交付任务:

Jenkins服务器提前部署好到目标主机的ssh免密,并安装ansible软件包。

由于是以jenkins用户调用ansible命令,所以需要设置jenkins用户到目标主机的免密。

新建playbook代码仓库

在这里插入图片描述

[root@server1 playbook]# tree .
.
├── ansible.cfg
├── httpd.conf.j2
├── inventory
│   ├── prod
│   └── test
├── playbook.yml
└── README.md

[root@server1 playbook]# cat ansible.cfg 
[defaults]
command_warnings=False
remote_user=ansible

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

在执行playbook时可以指定inventory文件: test、prod
在这里插入图片描述

只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值