版本控制系统 Gitlab Github
持续集成工具 Jenkins
部署工具 Ansible Saltstack Chef
本文通过Jenkins + Ansible + Gitlab
实现自动化部署。
Gitlab是一个开源分布式版本控制系统,由Ruby开发,有管理项目源代码、版本控制、代码复用与查找等功能。
github是分布式在线代码托管仓库,个人版本可直接在线免费使用,企业版本收费且需要服务器安装。
gitlab是分布式在线代码仓库托管软件,分社区免费版本与企业收费版本,都需要服务器安装。
1. 开源免费,社区免费版本适合中小型公司;
2. 差异化的版本管理,离线同步以及强大分支管理功能;
3. 便捷的GUI操作界面以及强大账户权限管理功能;
4. 集成度很高,能够集成绝大多数的开发工具;
5. 支持内置HA,保证在高并发下仍旧实现高可用性。
Nginx 静态Web服务器
Gitlab-workhorse 轻量级的反向代理服务器
Gitlab-shell 用于处理Git命令和修改authorized keys列表
Logrotate 日志文件管理工具
Postgresql 数据库
Redis 缓存服务器
1. 创建并克隆项目
2. 创建项目某Feature分支
3. 编写代码并提交至该分支
4. 推送该项目分支至远程Gitlab服务器
5. 进行代码检查并提交Master主分支合并申请
6. 项目领导审查代码并确认合并申请
3台机器需要做环境准备。
Jenkins + Ansible 192.168.30.128
test host 192.168.30.129
gitlab 192.168.30.130
# systemctl stop firewalld && systemctl disable firewalld
# setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
# vim /etc/hosts
192.168.30.128 jenkins.lzxlinux.com
192.168.30.129 test.lzxlinux.com
192.168.30.130 gitlab.lzxlinux.com
在Windows电脑hosts文件中添加本地dns:
192.168.30.128 jenkins.lzxlinux.com
192.168.30.129 test.lzxlinux.com
192.168.30.130 gitlab.lzxlinux.com
# yum install -y curl policycoreutils openssh-server openssh-clients postfix #安装gitlab组件
# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash #配置yum仓库
# systemctl start postfix && systemctl enable postfix #启动postfix邮件服务
# yum install -y gitlab-ce
# mkdir -p /etc/gitlab/ssl
# openssl genrsa -out "/etc/gitlab/ssl/gitlab.lzxlinux.com.key" 2048
# openssl req -new -key "/etc/gitlab/ssl/gitlab.lzxlinux.com.key" -out "/etc/gitlab/ssl/gitlab.lzxlinux.com.csr"
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:hz
Locality Name (eg, city) [Default City]:hz
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:gitlab.lzxlinux.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:
# openssl x509 -req -days 365 -in "/etc/gitlab/ssl/gitlab.lzxlinux.com.csr" -signkey "/etc/gitlab/ssl/gitlab.lzxlinux.com.key" -out "/etc/gitlab/ssl/gitlab.lzxlinux.com.crt"
# openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048
# chmod 600 /etc/gitlab/ssl/*
# ll /etc/gitlab/ssl
total 16
-rw------- 1 root root 424 Oct 9 10:45 dhparams.pem
-rw------- 1 root root 1289 Oct 9 10:44 gitlab.lzxlinux.com.crt
-rw------- 1 root root 1078 Oct 9 10:38 gitlab.lzxlinux.com.csr
-rw------- 1 root root 1675 Oct 9 10:37 gitlab.lzxlinux.com.key
# vim /etc/gitlab/gitlab.rb #修改下面内容
external_url 'https://gitlab.lzxlinux.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.lzxlinux.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.lzxlinux.com.key"
nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"
# gitlab-ctl reconfigure
# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf #第一个 server_name gitlab.lzxlinux.com; 下添加该行
rewrite ^(.*)$ https://$host$1 permanent;
# gitlab-ctl restart #重启gitlab
打开网页,访问gitlab.lzxlinux.com
。
第一次访问提示设置密码,设置密码后登录,默认用户名是root。
点击右上方+
→ New porject
,Project name
输入test-repo,Visibility Level
选择默认的Private
即可,最后点击Create project
创建项目。
任选一台其它机器,
# yum install -y git
# echo '192.168.30.130 gitlab.lzxlinux.com' >> /etc/hosts
# mkdir /home/repo && cd /home/repo
# git config --global user.name "admin"
# git config --global user.email "[email protected]"
# git -c http.sslVerify=false clone https://gitlab.lzxlinux.com/root/test-repo.git
Cloning into 'test-repo'...
Username for 'https://gitlab.lzxlinux.com': root
Password for 'https://[email protected]':
warning: You appear to have cloned an empty repository.
# cd test-repo/
# vim test.py
print "This is a test code"
# git add .
# git commit -m "First commit"
[master (root-commit) a52e6f0] First commit
1 file changed, 1 insertion(+)
create mode 100644 test.py
# git -c http.sslVerify=false push origin master
Username for 'https://gitlab.lzxlinux.com': root
Password for 'https://[email protected]':
Counting objects: 3, done.
Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://gitlab.lzxlinux.com/root/test-repo.git
* [new branch] master -> master
刷新浏览器,即可看到刚推送到gitlab服务端的代码。
点击左上方Admin Area
→ Monitoring
,
System Info gitlab系统运行情况,内存、磁盘使用
Logs
application.log gitlab项目日志
production.log gitlab页面访问日志
Health Check gitlab健康状态检查
点击左上方Admin Area
→ New user
,首先创建开发人员的账号。
填入用户名和邮箱地址后,其余保持默认,点击Create user
创建用户。
同样方式创建项目领导的账号。
接着将新增用户加入到之前创建的项目test-repo中。点击左侧Projects
→ test-repo
→ Manage access
,
选中dev
账号,然后分配Developer
角色权限,点击Add to project
添加该用户到项目中。
同样方法添加lead
账号到项目中。接着修改两个账号的密码,设置初始密码为12345678
。
选择之前git提交过代码的机器,
# cd /home/repo
# rm -rf test-repo/
# git -c http.sslVerify=false clone https://gitlab.lzxlinux.com/root/test-repo.git
Cloning into 'test-repo'...
Username for 'https://gitlab.lzxlinux.com': dev #这里使用dev账号,输入dev的密码
Password for 'https://[email protected]':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
# cd test-repo/
# git checkout -b release-1.0
Switched to a new branch 'release-1.0'
# ls
test.py
# vim test.py
print "This is a test code for release-1.0"
# git add .
# git commit -m "release-1.0"
[release-1.0 b1bfc5a] release-1.0
1 file changed, 1 insertion(+), 1 deletion(-)
# git -c http.sslVerify=false push origin release-1.0
Username for 'https://gitlab.lzxlinux.com': dev #使用dev账号push代码到release-1.0
Password for 'https://[email protected]':
Counting objects: 5, done.
Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for release-1.0, visit:
remote: https://gitlab.lzxlinux.com/root/test-repo/merge_requests/new?merge_request%5Bsource_branch%5D=release-1.0
remote:
To https://gitlab.lzxlinux.com/root/test-repo.git
* [new branch] release-1.0 -> release-1.0
接下来使用dev账号登录gitlab,点击Create merge request
提交合并申请。
使用lead账号登录gitlab,登入后右上角有Merge requests
消息提示。
点击Merge immediately
,写入一些内容,最后点击Comment
。
然后点击Projects
→ Your projects
→ test-repo
,
可以看到,release-1.0
分支的代码已经合并到master分支。
gitlab的大致使用过程就是这样,开发人员与运维人员各司其职。运维人员负责gitlab系统正常运行,管理账号及项目权限;开发人员负责代码编写,各自分支代码的提交与合并申请。