git常用命令 | 搭建github仓库 | gitlab的基本使用方法 | jenkins的安装与gitlab的应用 | 一步一步构建jenkins+gitlab+docker综合项目

GIT常用命令和搭建GITHUB仓库

关于git的介绍推荐 https://www.liaoxuefeng.com/ 简单通俗易懂

git的中文详细介绍 https://git-scm.com/book/zh/v2 官方权威深入

几个简单的git命令

1,命令行初始化git

[root@foundation28 ~]# mkdir demo

[root@foundation28 ~]# cd demo/

[root@foundation28 demo]# ls

[root@foundation28 demo]# git init

Initialized empty Git repository in /root/demo/.git/

[root@foundation28 demo]# ls /root/demo/.git/

branches  config  description  HEAD  hooks  info  objects  refs

2,建立测试文件

[root@foundation28 demo]# echo westos > readme.md

[root@foundation28 demo]# git status   # 每一步都有提示

# On branch master

#

# Initial commit

#

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

# readme.md

nothing added to commit but untracked files present (use "git add" to track)

[root@foundation28 demo]# git status -s

?? readme.md

[root@foundation28 demo]# git add readme.md   # 添加

[root@foundation28 demo]# git status -s

A  readme.md

[root@foundation28 demo]# git commit -m "add readme.md" # 提交

初次提交会提示是否要修改全局信息

[master (root-commit) bfc2ce5] add readme.md

 Committer: root <root@foundation28.ilt.example.com>

Your name and email address were configured automatically based

on your username and hostname. Please check that they are accurate.

You can suppress this message by setting them explicitly:



    git config --global user.name "Your Name"

    git config --global user.email you@example.com



After doing this, you may fix the identity used for this commit with:



    git commit --amend --reset-author



 1 file changed, 1 insertion(+)

 create mode 100644 readme.md

[root@foundation28 demo]# git config --global user.name "ha_weii"

[root@foundation28 demo]# git config --global user.email "zm227926019@163.com"

[root@foundation28 ~]# cat /root/.gitconfig 

[user]

name = ha_weii

email = zm227926019@163.com

[root@foundation28 ~]# cd /root/demo

3,再次建立文件

[root@foundation28 demo]# vim test.txt

[root@foundation28 demo]# git status -s

?? test.txt

[root@foundation28 demo]# vim readme.md  # 修改已经在仓库的文件

[root@foundation28 demo]# git status -s

 M readme.md

?? test.txt

[root@foundation28 demo]# git add readme.md # 添加之后查看状态,注意对比

[root@foundation28 demo]# git status -s

M  readme.md

?? test.txt

[root@foundation28 demo]# vim readme.md  # 修改在缓存区的文件

[root@foundation28 demo]# git status -s

MM readme.md

?? test.txt

[root@foundation28 demo]# git add  readme.md # 添加之后查看状态,注意对比

[root@foundation28 demo]# git status -s

M  readme.md

?? test.txt

[root@foundation28 demo]# git add test.txt

[root@foundation28 demo]# git status -s

M  readme.md

A  test.txt

4,提交文件

[root@foundation28 demo]# git commit -m "add test.txt"

[master 1771ab5] add test.txt

 2 files changed, 7 insertions(+)

 create mode 100644 test.txt

[root@foundation28 demo]# git status -s

5,查看日志

[root@foundation28 demo]# git log 

commit 1771ab51abf62795f25230523e76ee7bd32e6b29

Author: ha_weii <zm227926019@163.com>

Date:   Fri Aug 24 21:34:41 2018 +0800



    add test.txt



commit 892f0c53ca5b11134ecccf2da098ee8b356835d4

Author: root <root@foundation28.example.com>  # 第一次会默认用当前用户和主机名

Date:   Fri Aug 24 21:18:29 2018 +0800



add readme.md

[root@foundation28 demo]# git log --pretty=oneline 

1771ab51abf62795f25230523e76ee7bd32e6b29 add test.txt

892f0c53ca5b11134ecccf2da098ee8b356835d4 add readme.md

6,忽略文件,忽略隐藏文件

[root@foundation28 demo]# vim .file1   # 这是一个隐藏文件

[root@foundation28 demo]# git status -s  # 可以发现

?? .file1

[root@foundation28 demo]# vim .gitignore

.*  # 忽略所有隐藏文件

[root@foundation28 demo]# git status -s   # 没有发现

7,版本回退

[root@foundation28 demo]# vim test.txt 

[root@foundation28 demo]# git add test.txt

[root@foundation28 demo]# git commit test.txt -m "update test.txt"

[master 6c094e1] update test.txt

 1 file changed, 9 insertions(+)

[root@foundation28 demo]# git log

commit 6c094e1913503dca0a5e1b421735464fd708c49e

Author: ha_weii <zm227926019@163.com>

Date:   Fri Aug 24 21:50:18 2018 +0800



    update test.txt



commit 1771ab51abf62795f25230523e76ee7bd32e6b29

Author: ha_weii <zm227926019@163.com>

Date:   Fri Aug 24 21:34:41 2018 +0800



    add test.txt



commit 892f0c53ca5b11134ecccf2da098ee8b356835d4

Author: root <root@foundation28.example.com>

Date:   Fri Aug 24 21:18:29 2018 +0800



    add readme.md

现在我们不想升级test.txt

[root@foundation28 demo]# cat test.txt 

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

[root@foundation28 demo]# git reset --hard HEAD^  # 回到上一个版本

HEAD is now at 1771ab5 add test.txt

[root@foundation28 demo]# cat test.txt 

redhat

redhat

redhat

redhat

现在我们又想回到升级后的

[root@foundation28 demo]# git reset --hard 6c094e1913  # 后面是commit id 只要有这个id就可以返回,不用全部id,只要敲几位就可以了

HEAD is now at 6c094e1 update test.txt

[root@foundation28 demo]# cat test.txt 

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

redhat

8,reflog记录了所有的执行git的指令

[root@foundation28 demo]# git reflog 

6c094e1 HEAD@{0}: reset: moving to 6c094e1913

1771ab5 HEAD@{1}: reset: moving to HEAD^

6c094e1 HEAD@{2}: commit: update test.txt

1771ab5 HEAD@{3}: commit: add test.txt

892f0c5 HEAD@{4}: commit (initial): add readme.md

9,其他常用指令

[root@foundation28 demo]# git checkout -- test.txt  # 取消修改test.txt文件,对于还未添加的

[root@foundation28 demo]# git rm test.txt   # 删除文件,如果本地存在,需要-f强行删除

error: 'test.txt' has local modifications

(use --cached to keep the file, or -f to force removal)

[root@foundation28 demo]# git rm -f test.txt

rm 'test.txt'

[root@foundation28 demo]# ls

readme.md

[root@foundation28 demo]# rm -rf readme.md   # 删除本地文件,撤销操作

[root@foundation28 demo]# git checkout -- readme.md

[root@foundation28 demo]# ls

readme.md

 

GITHUB

1,注册用户,创建仓库,由于我们已经在本地初始化过,这里不要点击初始化仓库,已有的本地仓库名和这里的仓库名对应,如果不一样,那么github会另外建立一个

2,使用SSH keys的方法连接本地和github仓库

右上角的setting>SSH and GPG keys,添加新的ssh key

[root@foundation28 demo]# cat /root/.ssh/id_rsa.pub  把公钥上传

我们已经初始化过git,选择第三种方法

[root@foundation28 demo]# git remote add origin git@github.com:ha-weii/demo.git

[root@foundation28 demo]# git push -u origin master

The authenticity of host 'github.com (13.250.177.223)' can't be established.

RSA key fingerprint is 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.

Counting objects: 10, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (6/6), done.

Writing objects: 100% (10/10), 746 bytes | 0 bytes/s, done.

Total 10 (delta 0), reused 0 (delta 0)

To git@github.com:ha-weii/demo.git

 * [new branch]      master -> master

Branch master set up to track remote branch master from origin.

上传完毕!!!github上可以直接看到

3,本地修改文件并上传流程

[root@foundation28 demo]# vim readme.md 

[root@foundation28 demo]# git add  readme.md

[root@foundation28 demo]# git commit -m "update readme.md"

[master 9b5707e] update readme.md

 2 files changed, 1 insertion(+), 16 deletions(-)

 delete mode 100644 test.txt

[root@foundation28 demo]# git push -u origin master

Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (1/1), done.

Writing objects: 100% (3/3), 262 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:ha-weii/demo.git

   6c094e1..9b5707e  master -> master

Branch master set up to track remote branch master from origin.

4,在github上直接编辑,然后pull代码(自动合并)

[root@foundation28 demo]# git pull origin master

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (4/4), done.

remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0

Unpacking objects: 100% (5/5), done.

From github.com:ha-weii/demo

   9b5707e..26524a6  master     -> origin/master

Updating 9b5707e..26524a6

Fast-forward

 test1.txt | 3 +++

 1 file changed, 3 insertions(+)

 create mode 100644 test1.txt

[root@foundation28 demo]# ls

readme.md  test1.txt

 

GITLAB

https://about.gitlab.com/installation/ 官网安装说明

server1:172.25.28.1  与外网连通

1,安装软件,开启postfix

[root@server1 ~]# ls

gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm

[root@server1 ~]# yum install -y gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm

[root@server1 ~]# yum install -y net-tools

 

2,修改配置文件,重新加载

这里是gitlab主机的ip

[root@server1 ~]# gitlab-ctl reconfigure  # 时间很长...

[root@server1 ~]# gitlab-ctl restart

3,浏览器访问上面设置的ip

修改密码之后用root登录

4,创建一个demo测试

这里需要勾选初始化

5,选择配置SSH key

 

右上角setttings>SSH keys

[root@foundation28 ~]# cat /root/.ssh/id_rsa.pub   # 添加公钥

6,初始化,克隆git,上面选择了初始化,我们克隆下来就包含初始化,并在当前目录创建一个demo目录(由于之前我们创建了gitlhub的demo,所以github的demo目录要删除,或者克隆时换一个目录不要和github的在一个目录,最好删除,以免和后面实验混淆)

[root@foundation28 ~]# rm -rf demo/

[root@foundation28 ~]# git clone git@172.25.28.1:root/demo.git

Cloning into 'demo'...

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

be:7b:73:fb:1d:0b:06:fb:b3:c2:cf:d8:a8:2d:d1:96.

Please contact your system administrator.

Add correct host key in /root/.ssh/known_hosts to get rid of this message.

Offending RSA key in /root/.ssh/known_hosts:1

RSA host key for 172.25.28.1 has changed and you have requested strict checking.

Host key verification failed.

fatal: Could not read from remote repository.



Please make sure you have the correct access rights

and the repository exists.

[root@foundation28 ~]# rm -rf /root/.ssh/known_hosts

[root@foundation28 ~]# git clone git@172.25.28.1:root/demo.git

Cloning into 'demo'...

The authenticity of host '172.25.28.1 (172.25.28.1)' can't be established.

ECDSA key fingerprint is d5:88:51:fb:9c:6c:bd:67:27:cf:d4:dc:85:ac:63:ba.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '172.25.28.1' (ECDSA) to the list of known hosts.

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

克隆成功!!!

[root@foundation28 ~]# ls -a demo/

.  ..  .git  README.md

并且自动添加远程git到本地,不用像github那样手动添加

7,测试gitlab

[root@foundation28 ~]# cd /root/demo/

[root@foundation28 demo]# ls

README.md

[root@foundation28 demo]# vim README.md 

[root@foundation28 demo]# git add README.md

[root@foundation28 demo]# git commit -m "update README.md"

[master 7ef14d8] update README.md

 1 file changed, 2 insertions(+), 1 deletion(-)

[root@foundation28 demo]# git push origin master 

Counting objects: 5, done.

Writing objects: 100% (3/3), 277 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@172.25.28.1:root/demo.git

   191613e..7ef14d8  master -> master

测试成功!!!

 

JENKINS

server2:172.25.28.2 与外网连通

1,安装java环境jdk,jenkins软件,启动jenkins

[root@server2 ~]# ls

jdk-8u171-linux-x64.rpm  jenkins-2.121.3-1.1.noarch.rpm

[root@server2 ~]# yum install -y jdk-8u171-linux-x64.rpm jenkins-2.121.3-1.1.noarch.rpm

[root@server2 ~]# yum install -y git

[root@server2 ~]# systemctl start jenkins

2,浏览器访问虚拟机ip:8080(jenkins暴露的8080端口),初始化配置密码

3,安装插件

可以根据需要(新手安装推荐)

JINKENS实验一:构建每分钟一个触发

1,新建一个任务,与gitlab连动

添加凭据

选择添加

[root@foundation28 ~]# cat /root/.ssh/id_rsa

等待报错消失

构建触发器,和crotable类似,这里我们设置每分钟触发一次

构建,采用shell,命令随意

保存之后,就开始触发了,每分钟执行一次项目,也可以手动点击立即构建

点击查看输出

2,修改本地gitlab的demo目录下的文件,查看jenkins的变化

[root@foundation28 ~]# cd /root/demo/

[root@foundation28 demo]# ls

README.md

[root@foundation28 demo]# vim README.md 

[root@foundation28 demo]# echo hello jenkins > test.txt

[root@foundation28 demo]# git add test.txt

[root@foundation28 demo]# git add README.md

[root@foundation28 demo]# git commit -m "add test.txt"

[master e419c1f] add test.txt

 2 files changed, 1 insertion(+), 1 deletion(-)

 create mode 100644 test.txt

[root@foundation28 demo]# git push origin master

Counting objects: 6, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (4/4), 317 bytes | 0 bytes/s, done.

Total 4 (delta 0), reused 0 (delta 0)

To git@172.25.28.1:root/demo.git

   7ef14d8..e419c1f  master -> master

3,浏览器查看,我们添加了两次,所以有两个#2 #3

 

JENKINS实验二:即时触发

1,在插件管理中安装gitlab和gitlab hook插件

2,修改testjob项目

去掉轮询

构建触发器

 

 

点击Generate获取,token后面备用,URL后面备用

在gitlab获取

[root@server2 ~]# curl -X PUT --header "PRIVATE-TOKEN: PEGbSu_Yg6Brg7ZPArYq" 'http://172.25.28.1/api/v4/application/settings?allow_local_requests_from_hooks_and_services=true'

在gitlab:demo>settings>integrations

点击添加(URL和TOKEN是在jenkins里面生成的)

测试:点击右下角的test,测试push event,如果出现200提示,说明成功

真机测试:

[root@foundation28 demo]# vim test.txt 

[root@foundation28 demo]# git add test.txt

[root@foundation28 demo]# git commit -m "update test.txt"

[master f7b7498] update test.txt

 1 file changed, 3 insertions(+)

[root@foundation28 demo]# git push origin master

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 292 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@172.25.28.1:root/demo.git

   e419c1f..f7b7498  master -> master

jenkins立即检测到

 

 

jenkins+gitlab+docker综合案例

git -> Dockerfile -> gitlab -> jenkins -> docker plugin -> build image -> push registry -> docker run

测试一:开启一个nginx容器做测试,测试是否可以通过jenkins关闭nginx容器,作为综合案例运行docker用

1,jenkins安装docker插件

注意:插件一次安装不上继续安装,有时候要两三次才可以安装成功!!!

2,安装docker软件

docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm container-selinux-2.9-4.el7.noarch.rpm

3,导入rhel7.tar,nginx.tar

docker load -i rhel7.tar

docker load -i nginx.tar

开启一个nginx容器

4,注意必须给jenkins权限执行docker

visudo

4,创建一个dockerjob

如果在控制自台出现如下报错

sudo: sorry, you must have a tty to run sudo

在visudo时注释 Default requiretty 一行

5,点击开始构建,构建成功,查看nginx的状态

[root@server2 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES

4338fdd3e9b3        nginx               "nginx -g 'daemon ..."   About a minute ago   Exited (0) 10 seconds ago                       vm1

 

 

测试二:提交Dockerfile后自动构建镜像

1,testjob在之前的测试中已经做好了即使触发,现在添加docker构建功能

2,修改/var/run/docker.sock的权限为777

3,提交Dockerfile和编译所需文件

[root@foundation28 demo]# cat Dockerfile 

FROM rhel7

EXPOSE 80

COPY dvd.repo /etc/yum.repos.d/dvd.repo

RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all

COPY index.html /var/www/html

CMD ["/usr/sbin/httpd","-D","FOREGROUND"]



[root@foundation28 demo]# cat dvd.repo 

[dvd]

name=dvd

baseurl=http://172.25.28.250/source7.3

gpgcheck=0

[root@foundation28 demo]# cat index.html 

<h1>www.westos.org</h1>

<h1>www.westos.org</h1>


(经过测试可以构建出新的镜像)

[root@foundation28 demo]# git add Dockerfile dvd.repo index.html

[root@foundation28 demo]# git commit -m "add Dockerfile&dvd.repo$index.html"

[root@foundation28 demo]# git push origin master

4,产生触发#11

JenKins构建成功

查看镜像,TAG就是我们之前定义的${BUILD_NUMBER},并且rhel7镜像的版本标记为11和lastest实际上是一样的,会自动修改标签

[root@server2 ~]# docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE

rhel7               11                  709915d668ec        About a minute ago   169 MB

rhel7               latest              709915d668ec        About a minute ago   169 MB

5,测试构建的镜像

[root@server2 ~]# docker run -d --name vm1 rhel7

5e29d5f9ec7b693f3d72bc777f924c53be599c2ec460442659f2674f69f4fa07

[root@server2 ~]# curl 172.17.0.2  (没有做端口映射)

成功!!!

 

测试三:整合dockerjob和testjob

1,修改dockerjob

只要testjob(即时检测)检测到提交了代码,就开始创建一个镜像,dockerjob就触发创建并且运行一个容器实例

 

2,测试,修改index.html,提交触发testjob和dockerjob

[root@foundation28 demo]# vim index.html

[root@foundation28 demo]# git add index.html

[root@foundation28 demo]# git commit -m "update index.html"

[master 2780ef2] update index.html

 1 file changed, 2 insertions(+)

[root@foundation28 demo]# git push origin master

成功!!!

3,查看触发结果

[root@server2 ~]# docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

rhel7               13                  5d363e4a028c        8 minutes ago       185 MB

rhel7               latest              5d363e4a028c        8 minutes ago       185 MB

[root@server2 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES

f64ee098da00        rhel7               "/usr/sbin/httpd -..."   8 minutes ago       Up 8 minutes        0.0.0.0:80->80/tcp   apache

 

 

综合案例:

1,修改dockerjob

 

2,修改本地代码提交触发

[root@foundation28 demo]# vim index.html

[root@foundation28 demo]# git add index.html

[root@foundation28 demo]# git commit -m "update index.html"

[master 7134c17] update index.html

 1 file changed, 3 insertions(+), 3 deletions(-)

[root@foundation28 demo]# git push origin master

3,创建本地仓库,push镜像测试

[root@server2 ~]# docker load -i registry-2.3.1.tar 

# 如果没有tar包,可以用pull在网上拉取

[root@server2 ~]# docker run -d --name registry -p 5000:5000 registry:2.3.1 

34fc5afff47f2f38917f010496d50e640554c6403cf77a5c5da1ff49fc91df24

[root@server2 ~]# docker tag nginx:latest localhost:5000/nginx

[root@server2 ~]# docker push localhost:5000/nginx

成功!!!

3,添加仓库到testjob,开启自动push镜像功能

 

4,修改本地文件,提交触发

[root@foundation28 demo]# vim index.html

[root@foundation28 demo]# git add index.html

[root@foundation28 demo]# git commit -m "update index.html"

[master b19408f] update index.html

 1 file changed, 4 insertions(+)

[root@foundation28 demo]# git push origin master

JenKins成功检测并触发!!!

5,查看镜像

[root@server2 ~]# docker images 

REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE

localhost:5000/rhel7   16                  56f85075bee2        4 minutes ago       208 MB

localhost:5000/rhel7   latest              56f85075bee2        4 minutes ago       208 MB

6,修改dockerjob

上传到本地仓库之后,会自动修改名字为localhost:5000/rhel7,所以在执行的shell里面也要进行修改,否则rhel7是本地镜像,而不是本地仓库的镜像。

 

至此,从编写Dockerfile,提交文件到gitlab上,然后gitlab被jenkins的testjob源码管理模板即时检测到,然后通过jenkins的docker插件构建已上传到gitlab的代码为为一个镜像,同时上传到本地仓库,dockerjob在testjob完成之后触发,开始执行shell,创建一个容器实例就结束啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值