一.GitLab与jenkins
Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮助开发团队更高效的集成和发布代码。
二.server1安装git,部署gitlab实现代码提交
[root@server1 ~]# yum install -y git
下载好gitlab软件并安装
[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 ~]# cd /etc/gitlab/
[root@server1 gitlab]# ls
gitlab.rb
[root@server1 gitlab]# vim gitlab.rb
13 external_url 'http://172.25.70.1'
[root@server1 gitlab]# gitlab-ctl reconfigure
浏览器访问http://172.25.70.1可以看见gitlab的登陆界面
填写新密码后重新登陆
创建一个新项目gitlabtest,勾选initialize repository with a README
第一次创建需要添加密钥,同时看见生成一个README文件
[root@server1 gitlab]# ssh-keygen
添加公钥到gitlab
[root@server1 gitlab]# cat /root/.ssh/id_rsa.pub
进入到新建的项目中,复制上面的SSH地址
[root@server1 ~]# git clone [email protected]:root/gitlabtest.git #仓库克隆,查看可以发现git中已经有了新建的项目
Cloning into 'gitlabtest'...
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@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# ls
README.md
[root@server1 gitlabtest]# cat README.md
# gitlabtest
新建文件text.txt测试git和gitlab是否可以上传成功
[root@server1 gitlabtest]# echo redhat > test.txt
[root@server1 gitlabtest]# git add test.txt
[root@server1 gitlabtest]# git config --global user.email "[email protected]"
[root@server1 gitlabtest]# git config --global user.name "rong"
[root@server1 gitlabtest]# git commit -m "add test"
[master b8fe06f] add test
1 file changed, 1 insertion(+)
create mode 100644 test.txt
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
44f4677..b8fe06f master -> master
Branch master set up to track remote branch master from origin.
F5刷新页面可以看到新添加的文件test.txt,内容为redhat
二.server2部署jenkins
下载jdk和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 ~]# systemctl start jenkins
[root@server2 ~]# netstat -anltp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 1258/java
虚拟机需要能够联网
访问 172.25.70.2:8080
将浏览器切换成中文的
点击choose,此时没有中文,点击选择一个语言添加
添加中文
点击add
点击ok后刷新jenkins界面
[root@server2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
84d3392dce0f42a1b31f212e8ba0e27a
安装官方推荐插件
选择使用admin账户继续
点击保存完成
点击开始使用
点击创建一个新任务hello,选择自由风格
点击配置,复制gitlab中的地址
没有添加密钥,所以需要添加,点击Add
选择Jenkins
类型选择SSH Username with private key,填写Username为root,Private key选择Enter directly
[root@server2 ~]# yum install -y git ##一定要安装
回到server1复制私有密钥
[root@server1 gitlabtest]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAufuCA1w2IyF72wtuU79CACTUFAw3dZ9kLNlKcQ31Pv9htDSu
iZtcuiOphQmhvtB4YwLT8op8YTW7rbmjNHVV8X0cE28dqemEI2f1Q2rpaTuzOj3n
LUNMWzfTxkohMSdlMvx8YYQ5ILisojKeA9vmRYmKlibNLtzOIs5L6oar/FstlnnE
cA0fsWUAIAVBtYmUbKFloKiavmV+Z2U+CYxWzvjtc+1wEi4Fj4X2ce2Jp2vCDULZ
F2aIDoHZeUNMdRXvIWWzlddFdz7j+rYaw8JEiNHrAAd1WJBGczXm+T7FdBlkYOSI
zqR5ZfgzydjwwE+bAhNrXXis0QHKgWD9epSipwIDAQABAoIBAQCOEel0Ral5Vqe1
YVsLEGwLjhaPpfFrobG1bNun1yDD2fQ545B8v7iq3HkvjncHO1rrT4q2mUGARLq0
b72TYhqf2ZFr6xK+7Aorvcsmj/HzmE5GLGl/MwyOFexpadFHKi/tLeCZ4ZZ+P3Ro
hsAcdIvIDNRX9RYCOVwiTHLDmdKhd3uKKaWeDM/OmdyTLoNtZ8vIcKUJXvhYtSgL
TsO3TMxdQaTIWuFNBRR7qrSxcsQAc8y29LqXDYMbBiMCOSc5hKMdeEa9kf5yg7uK
xbZ3uzmFkOY8M2UIaB1LBhKY2J0FXY8VF9SjkoWSddDfcAMyaz8dvqQQqu/RrY5m
N8UZQU3ZAoGBAONgoME4o+PmEEWDFsIJMSlO/rgCwcXY0ly2N5Gl874qU5/NmNL2
U1KFdVKv/JJF/4zrwI8iIc3oTECa+Ti9IrZUNikXjxm3SF3l6d8Vq9LviRh8gOFo
eAnGkvvs1WlfAF2F8zrL7DX8bbBLme2LtVGavdEC5agV0PqzT5/guVDbAoGBANFk
5tXsD4RWkyeEJqCLKEIK3yNxfDxhqGE0iVQjklwEO7/DjRWgKRe97FTiopAfE0bd
r4Fatz6T0TUm8SPG3KcLTE8MiY2AzKYHNbLyRK8xUD+LZbjaiQCxDskUXLBhJ2Ij
ne33OpJEve8SJBoLp/pk5X6KIq5ugs6mg3u28MklAoGBANcvkJOsjfZVudp/WF9k
IaGNgCUXftlF/Lf/PxHZM5cqKaAYDGTC+FIlucX6hZbNJi/wwXj0fXeIO/n8cJZQ
8PQLOIKlKCnXOmaa+z3EHavwRBfnZHVu0AO4aUyAc+xYG1lnNqzTZwYkko6Azflw
+bV0M+YFzuDHXNKWNmoBXIB3AoGAdSMTFxzlWUztKS/+Q9VVAgz+4t77dvPSs/4l
zNHRcHRV0GLeq/haxJNUf/AArMsVh5FAOwa6d+FNKYTNZQw8J55kY9xJnsUstrxV
x/NLhQ37LHEYyJ5IAgEKmmYvq+PNmlL+aD7jnyuhbPojBAb9Q0/qKi2wVRAxUNVJ
vI2MiZkCgYEAwLBB/pwdaahvpqZyQ5E5UReZ9KP21JSaa4JzxdBbBcerEZlagRz0
4XmJOb9N0GYFq7wZQIkCWNcMSb+cPuZ1zKQpS49LOYjHxg5cVllXlcZF3+ZUSggJ
hxTt9b7PSsyvdVNLC9/59Z896ZMUFTxbd3eJOkmafl6ZJXK8S0zSf/0=
-----END RSA PRIVATE KEY-----
点击Add添加密钥
构建触发器,选择定时构建,写上定时策略* * * * *
构建–>增加构建步骤—>执行shell
写完之后保存
编辑index.html文件,选择push之后,每一分钟它会刷新,会在构建名称之后选择控制台输出
[root@server1 gitlabtest]# pwd
/root/gitlabtest
[root@server1 gitlabtest]# echo hello.org > index.html
[root@server1 gitlabtest]# git add index.html
[root@server1 gitlabtest]# git commit -m "add index"
[master 44fa44d] add index
1 file changed, 1 insertion(+)
create mode 100644 index.html
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
b8fe06f..44fa44d master -> master
Branch master set up to track remote branch master from origin.
三.关联gitlab和jenkins
jenkins下载插件
系统管理->管理插件
可选插件->找到Gitlab和Gitlab Hook直接下载
配置->构建触发器->选择Build when a change is pushed to GitLab. GitLab webhook URL: http://172.25.70.2:8080/project/hello (记住这个URL)->高级
点击Generate生成token
去掉轮询
配置gitlab
点击最上面一行的小起子->选择设置
Outbound requests :外发请求
进去自己的工程下:设置——>导入所有仓库
填写URL和Secret Token,Trigger全选,最后点击Add Webnook
测试,push events
可以在Jenkins上看到触发的事件和相应的控制台输出
自己修改文件上传也会有相应的触发
[root@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# ls
index.html README.md test.txt
[root@server1 gitlabtest]# echo redhat > index.html
[root@server1 gitlabtest]# git add index.html
[root@server1 gitlabtest]# git commit -m "add index"
1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 267 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
44fa44d..342fef2 master -> master
Branch master set up to track remote branch master from origin.
三、安装docker
[root@server2 docker]# ls
compose
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
docker-ce-18.09.5-3.el7.x86_64.rpm
docker-ce-cli-18.09.5-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]# rm -f docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm docker-ce-18.09.5-3.el7.x86_64.rpm containerd.io-1.2.5-3.1.el7.x86_64.rpm docker-ce-cli-18.09.5-3.el7.x86_64.rpm
[root@server2 docker]# ls
compose
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 *.rpm
[root@server2 docker]# systemctl start docker
[root@server2 ~]# ls
docker jdk-8u171-linux-x64.rpm jenkins-2.121.3-1.1.noarch.rpm nginx.tar registry2.tar
[root@server2 ~]# docker load -i registry2.tar
d9ff549177a9: Loading layer 4.671MB/4.671MB
f641ef7a37ad: Loading layer 1.587MB/1.587MB
d5974ddb5a45: Loading layer 20.08MB/20.08MB
5bbc5831d696: Loading layer 3.584kB/3.584kB
73d61bf022fd: Loading layer 2.048kB/2.048kB
Loaded image: registry:2
[root@server2 ~]# docker load -i nginx.tar
014cf8bfcb2d: Loading layer 58.46MB/58.46MB
832a3ae4ac84: Loading layer 53.91MB/53.91MB
e89b70d28795: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
[root@server2 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
34b317046620db249ce9b33d66e8c482b7d37841e5faac3ec469a92625a7cba8
[root@server2 ~]# ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Jun 15 02:53 /var/run/docker.sock
[root@server2 ~]# chmod 777 /var/run/docker.sock
[root@server2 ~]# su - jenkins
[root@server2 ~]# vim /etc/sudoers
93 jenkins ALL=(ALL) NOPASSWD: ALL
在插件管理中安装三个docker插件
安装好后点击hello中的配置——>构建,删除执行shell,重新添加构建(注意勾选do not build the image)
新建一个任务docker,构建自由风格
构建触发器
构建环境
配置后保存
[root@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 gitlabtest]# git add Dockerfile
[root@server1 gitlabtest]# git commit -m "add Dockerfile"
[master d25b041] add Dockerfile
1 file changed, 2 insertions(+)
create mode 100644 Dockerfile
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 359 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
342fef2..d25b041 master -> master
Branch master set up to track remote branch master from origin.
在server2中查看镜像
[root@server2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/nginx latest 23dec48ca5fa About a minute ago 10
registry 2 f32a97de94e1 3 months ago 25.8MB
nginx latest e548f1a579cf 15 months ago 109MB
[root@server1 gitlabtest]# vim index.html
www.redhat.com
[root@server1 gitlabtest]# git add index.html
[root@server1 gitlabtest]# git commit -m "v3"
[master 97f3be1] v3
1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
d25b041..97f3be1 master -> master
Branch master set up to track remote branch master from origin.
在网页上查看172.25.70.2