什么是gitlab:
- GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
什么是Jenkins:
- Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
两者结合的优势:
- 这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮组开发团队更高效的集成和发布代码
一、gitlab的安装与配置
- 安装配置
[root@server1 ~]# yum install -y gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
[root@server1 ~]# cd /etc/gitlab/
[root@server1 gitlab]# ls
gitlab.rb
[root@server1 gitlab]# vim gitlab.rb ##编辑gitlab的配置文件,将ip修改为自己gitlab所在的ip
13 external_url 'http://172.25.19.1'
[root@server1 gitlab]# gitlab-ctl reconfigure ##重新加载
- 访问Gitab页面输入:http://172.25.19.1
- 重置密码
- 以root身份登陆
- create a project
- 添加公钥
为了通过ssh直接上传和拉取代码,所以需要在gitlab中做免密(在/root/.ssh/中生成公钥和私钥)
- 在物理机上使用git来进行版本控制时,为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)😕/, git://,或是只是以一个用户名(git 会认为这是一个ssh 地址)为前辍.
[root@server1 ~]# git clone git@172.25.19.1:root/demo.git
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
README.md
二、安装jenkins
- 在server2中安装 jdk和 jenkins
[root@server2 ~]# yum install -y jdk-8u171-linux-x64.rpm
[root@server2 ~]# yum install -y jenkins-2.121.3-1.1.noarch.rpm
[root@server2 ~]# /etc/init.d/jenkins start ##端口是8080
Starting jenkins (via systemctl): [ OK ]
- 虚拟机需要能够联网
- 网页上输入172.25.19.2:8080
- 获取解锁 Jenkins密码
[root@server2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
bf44894d032849a093a1adb3b80e029a
- 将密码复制到网页,解锁Jenkins
- 安装官方推荐插件,选择 左侧 选项进行安装
- 大概等几分钟,进度条完成即可
- 用户登录,用户名:admin,密码:刚才解锁的 Jenkins密码
- 配置安装完成之后:
- 建立一个新的项目hui
- 点击配置
- 查看私钥,将私钥添加上去
[root@server2 ~]# yum install -y git ##一定要安装
[root@server1 ~]# cd .ssh
[root@server1 .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@server1 .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2utjQ1jkywkrOOmpXKCsHe0UR5v75UCQHlmgxNqiSKYNFKry
I4Z43QMlFvAYOh7qKE9o5UVXUfK7nEf4MzkH3J4Z/aRK/7ArVT8Arzg5gMp3e9Zt
IQ/h1TjQo391tCJG44N6lRakrOuYczlG+2Ms/a/f/u3GKmG2GAjN5e5IcgrTx3PC
c9oSAU7s92Rvf1H+vJ29rw0B3/mxhJh3vP/rU5qqFjcilYhY/XdO9L8WqAaDqwsv
5CEQMHISlnio4xAO10qGGzXSy+4+R1hScQ9JCg420OIyd9sMQ6BuLRmIBg61/G5g
uyoW6NHJ7B2UUbjIXM3FEhBPRC8lMJl0uF2bxwIDAQABAoIBADLKa/RDGon0rZ99
rrp72JL030Ch8vZEXWt9NeyWIRKj2+MQqi8N0trMEP3aZHSPmZoSmm6fANxVaauf
kvknYSiRUcxkIrZhxBv6CwmcDNNRphkILbd+/NFAZj+YodFSJopAhd8zKq+n1W3e
Oxa18slE1b5KojBRDTNUT5jqCMrURDj0MuhTFsZcrR61BxQpnerulRTDM19vFggS
6MMcsvq14T70dh/6/xZZT06DIpa3cjryj/wOlai2L3Bg+Jp6NJkKQLPgx52DDNo/
ZXfshN81WjujydgHoHKn+hnBZXV1qFAVG9nqoEncrUVvuQYZXjmvWw1RDCDFqFaT
u4v+c6ECgYEA+qKst2xg/W4LNinKHKBlgyTtKY7a6amT6QQNcdoPZq1fWPwf3okj
WpNgxxaM91LetmaOE7FtSLLjr9aczjnJ30BojP/JWwuonpHlVUo+d+adqHXQDF7s
JopjHFwllFFP2oc+tKXg8KoeMjlID/jLjLKI8SAmCHjWtx+9PVIglPcCgYEA35rt
8BlE75Pljk4DSVaNfVFFVFfRpwbCXBJqg6wPtvvZF89TGgRT508PArXmAKiuXE3r
saEFz9HPGlwLc5A5fWdjpxPBQ+gHWyl/21ahun9ynppo4fZ+luPYgZ6nW9wF9j/G
BhubtmQyeH+eCGH6aR95ql060LBX2wuFlxYQC7ECgYEAtbiO2+rzo6xO6rV/+iN9
lomGfvQ52uL+ABvVF7BQLFUV5bHf9XyfKoPizlaWXJg0LDHNX4/sOaKinRJQ3OFf
ccQESf8HYkDgwB/uFFnhUxPdSZAqCV4lgIgj9iMFiDUwXbRjjZ0bq8LcY/POQO5V
vyyPR6zUhp3+qAWWMsjCIN8CgYEAmg6jOpYeYbYTJb1oFEI2z42L57Vts9c7V7Y0
fq2wUhEonHfyOG2c5TQaEnMCmZeeMehZqBNZ7roOJ4odNay7f0QZa4Z31HJrhwqL
lbIVUWn3rYCTHIP46brncz687dQko2mC5Lhmyv4zq8O5POtMXNsbtx3upNOqZDeG
/fZsbbECgYBBB1tC1OEfjCwaqrN6sK1QIxvTQLYErKrHFg0u//BqL+NNFyUE2kbA
XYv+Bm/jOnyoEOP1oTHU8JcJBxXbQFJkWbdYFya7RvxjjdHpyWxfeSDuCmqBw6g4
GMBIfFU6JCv5/jgpuWMgfd+zxwJ9s6CVhjnEEcueB01R77AkXisrgQ==
-----END RSA PRIVATE KEY-----
- 构建触发器,选择定时构建,写上定时策略
- 构建环境–>增加构建步骤—>执行shell ls -l
- 写完之后一定要保存
- 在真机中编辑文件,选择push之后,每一分钟它会刷新,会在构建名称之后选择控制台输出
[root@server1 ~]# cd hui/
[root@server1 hui]# vim index.html
[root@server1 hui]# cat index.html
westos.org
[root@server1 hui]# git add index.html
[root@server1 hui]# git commit -m "add index"
[root@server1 hui]# git push -u origin master
6. 关联gitlab和jenkins
-
jenkins下载插件
配置
生成token
-
配置gitlab
-
测试,push events
可以在Jenkins上看到触发的事件和相应的控制台输出
-
自己修改文件上传也会有相应的触发
[root@server1 ~]# cd hui/
[root@server1 hui]# echo hello > index.html
[root@server1 hui]# git add index.html
[root@server1 hui]# git commit -m "add index"
[root@server1 hui]# git push -u origin master
三、安装docker
- server2安装docker,并导入镜像
[root@server2 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@server2 docker]# yum install -y *
[root@server2 docker]# systemctl start docker
[root@server2 docker]# docker load -i registry.tar
[root@server2 docker]# docker load -i nginx.tar
[root@server2 docker]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2.3.1
2d8cd0427136f4efed8b4d5071772e634a0fccb5a1cd5d07941fc3b4a58d3a7f
[root@server2 docker]# ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Mar 31 16:40 /var/run/docker.sock
[root@server2 docker]# chmod 777 /var/run/docker.sock
[root@server2 docker]# vim /etc/sudoers
92 jenkins ALL=(ALL) NOPASSWD: ALL
- 配置后保存
[root@server1 hui]# pwd
/root/hui
[root@server1 hui]# vim Dockerfile
[root@server1 hui]# cat Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 hui]# ls
Dockerfile index.html README.md
[root@server1 hui]# cat index.html
westos.org
[root@server1 hui]# git add Dockerfile
[root@server1 hui]# git commit -m "add Dockerfile"
[root@server1 hui]# git push -u origin master
[root@server2 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/nginx 4 23dec48ca5fa About a minute ago 109MB
localhost:5000/nginx latest 23dec48ca5fa About a minute ago 109MB
nginx latest e548f1a579cf 13 months ago 109MB
registry 2.3.1 83139345d017 3 years ago 166MB
- 修改index.html,然后上传,会引发新的触发
可以用tree查看docker