环境规划
主机分配html
- 192.168.2.139 : gitlab
- 192.168.2.141 : jenkins
- 192.168.2.142 : haproxy01
- 192.168.2.143 :haproxy02
- 192.168.2.144 :tomcat01
- 192.168.2.145 : tomcat02
各节点环境配置
安装一些使用的工具包
[root@ansible ~]# ansible all -m shell -a 'yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion -y'
[root@ansible ~]# ansible all -m shell -a 'yum install curl policycoreutils openssh-server openssh-clients postfix -y'
安装epel源java
ansible all -m shell -a 'wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo'
禁用并关闭防火墙linux
[root@ansible ~]# ansible all -m shell -a 'systemctl disable firewalld' [root@ansible ~]# ansible all -m shell -a 'systemctl stop firewalld'
禁用selinuxnginx
[root@ansible ~]# ansible all -m shell -a 'sed -i ”/SELINUX/s/enforcing/disabled/“ /etc/selinux/config' [root@ansible ~]# ansible all -m shell -a 'setenforce 0'
安装gitlab服务
下载gitlab包:百度云盘下载:https://pan.baidu.com/s/1OrYy3Gx8mXcezH_JDubU-A 密码:sk73
下载的包文件存放在/usr/local/src目录下c++
- 安装
[root@gitlab src]# yum localinstall gitlab-ce-8.13.5-ce.0.el7.x86_64.rpm -y
- 修改配置文件/etc/gitlab/gitlab.rb
[root@gitlab src]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.2.139' #访问地址:能够写主机名或ip地址 #配置邮件通知(添加帐号通知等,能够不写) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "mail_name@163.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false gitlab_rails['gitlab_email_from'] = "mail_name@163.com" user["git_user_email"] = "mail_name@163.com"
- 修改配置文件后执行重载指令
重载指令执行须要一段时间
[root@gitlab ~]# gitlab-ctl reconfigure
上面的指令执行完成后能够使用gitlab-ctl status
指令查看git依赖的服务git
[root@gitlab ~]# gitlab-ctl status run: gitlab-workhorse: (pid 3468) 37s; run: log: (pid 3295) 63s run: logrotate: (pid 3382) 55s; run: log: (pid 3381) 55s run: nginx: (pid 3342) 61s; run: log: (pid 3341) 61s run: postgresql: (pid 3027) 112s; run: log: (pid 3026) 112s run: redis: (pid 2890) 118s; run: log: (pid 2889) 118s run: sidekiq: (pid 3250) 69s; run: log: (pid 3249) 69s run: unicorn: (pid 3195) 71s; run: log: (pid 3194) 71s
此时就能够使用浏览器web界面来访问git了,使用gitlab主机地址直接访问便可
登陆前先设置密码
登陆后,须要将默认的用户注册功能取消,由于用户是由管理员定义分配的。
点击右上角扳手图标进入下面的界面,建立用户设置密码,用户组,项目等
建立一个测试项目,用在本地测试
web
本地安装git客户端
[root@gitlab ~]# yum install git -y
本地测试版本管理
- 将测试项目clone到本地的当前目录下
[root@gitlab testdir]# git clone http://192.168.2.139/myweb/testweb.git Cloning into 'testweb'... Username for 'http://192.168.2.139': yufu Password for 'http://yufu@192.168.2.139': remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done.
- 查看内容
[root@gitlab testdir]# ls testweb [root@gitlab testdir]# cat testweb/README.md test111
- 修改内容后提交
在原来的文件中添加了一行新内容
克隆的文件修改后提交前,要将文件添加git add
到本地,而且提交git commit
声明操做,而后在将最新文件推送到git服务端上
[root@gitlab testweb]# git add README.md
[root@gitlab testweb]# git commit -m "add new line" #提示错误:提示信息给出了解决办法 Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository.
根据提示执行指令redis
[root@gitlab testweb]# git config --global user.email "136423119@qq.com" [root@gitlab testweb]# git config --global user.name "yufu"
从新提交sql
[root@gitlab testweb]# git commit -m "add new line" [master c62845d] add new line 1 file changed, 2 insertions(+), 1 deletion(-)
执行git pushshell
[root@gitlab testweb]# git push #须要验证用户密码 Username for 'http://192.168.2.139': yufu Password for 'http://yufu@192.168.2.139': Counting objects: 5, done. Writing objects: 100% (3/3), 250 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To http://192.168.2.139/myweb/testweb.git cc5ab3e..c62845d master -> master
此时到git上查看文件内容已经发生了更改
本地修改内容执行commit提交后,并无真正条到git服务端,只有执行git push
后才真正同步
其余经常使用git 指令
git config --global user.name “name“ #设置全局用户名,能够非真实帐户 git config --global user.email xxx@xx.com #设置全局邮箱,能够非真实邮箱 git config --global –list #列出用户全局设置 git add index.html #添加文件到暂存区 git commit -m “11“ #提交文件到工做区 git status #查看工做区的状态 git push #提交代码到服务器 git pull #获取代码到本地 git log #查看操做日志 vim .gitignore #定义忽略文件 git reset --hard HEAD^ #git版本回滚, HEAD为当前版本,加一个^为上一个,^^为上上一个版本 git reflog # #获取每次提交的ID,能够使用--hard根据提交的ID进行版本回退 git reset --hard 5ae4b06 #回退到指定id的版本 # git branch #查看当前所处的分支 git checkout -- file #从服务器更新某个那文件覆盖本地的文件
安装Jenkins
jenkins须要依赖java环境,所以要安装jdk,从本地上传安装包进行安装,jenkins服务上的jdk能够直接使用rpm包安装
jenkins:https://pan.baidu.com/s/1lEBWD9OKZEZiOAjn4ZM57A 密码:up81
JDK:https://pan.baidu.com/s/1KA99fCN7e7Sx9IfBq8c7aA 密码:3r3e
[root@jenkins ~]# yum install jenkins-2.27-1.1.noarch.rpm jdk-8u111-linux-x64.rpm -y
jenkins安装后的配置文件在/etc/sysconfig/jenkins
- 启动jenkins
[root@jenkins ~]# systemctl start jenkins
jenkins启动时会建立一个用户和密码,在日志中能够找到,用户使用该信息登陆
- 查看日志中的信息以下:
[root@jenkins ~]# cat /var/log/jenkins/jenkins.log Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: ea02cbe6a0364330942bed70e7d8198f This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword
jenkins服务启动后就能够访问web页面了,使用刚才日志里面的密码进行登陆 使用ip:8080 进行登陆
确认后会进入联网状态,jenkins是基于插件方式工做的,安装时要安装不少插件,有两种安装方式:一种是自定义插件安装,一种是使用默认插件安装,这里选择使用默认的安装方式,一般在安装插件过程当中会有不少插件安装失败,能够在后面将安装失败的插件导入进来,或者安装后进行选择安装插件也能够。
安装插件的过程比较长,耐心等待
【注意:若是界面一直停留在上图中,那么是卡住了,从新开个页面再访问便可,从新访问后选择跳过继续下面的操做】
从新访问后的页面以下:选择跳过继续配置
设置管理员用户名密码等信息
其余信息先能够跳过,就能够进入到配置界面了
解决插件安装失败问题
有不少插件没有安装成功,能够将相应的插件下载到本地,而后导入到jenkins插件目录
jenkins安装插件的目录在/var/lib/jenkins/plugins
下;
下载插件:https://pan.baidu.com/s/1_pMrHzThiqZ93x9K6z5_Fw 密码:sxcu
将插件压缩包传到jenkins的插件目录解压,并修改属主属组
[root@jenkins plugins]# tar xvf jenkins_plugin.tar.gz [root@jenkins plugins]# chown -R jenkins:jenkins ./ [root@jenkins plugins]# mv jenkins_plugin.tar.gz /opt/ #移走压缩包
- 重启jenkins服务
[root@jenkins plugins]# systemctl restart jenkins
导入插件后可能还会有少数插件不可用,若是使用不到相应功能能够不用安装,若是未来须要使用新的插件能够经过从网上下载后导入的方式进行,也能够在线安装。
插件下载地址:http://updates.jenkins-ci.org/download/plugins/
gitlab和gitlab Hook Plugin插件
- 确认gitlab和gitlab Hook Plugin两个关键插件是否安装,没有安装则能够在线安装
这两个插件很重要,gitlab是从gitlab服务器端获取代码的插件,gitlab Hook Plugin 是触发jenkins构建项目的插件,若是没有这个插件,那么未经测试的代码直接就发布到生产环境中去了
配置jenkins和gitlab关联
jenkins要从gitlab上获取代码,所以二者之间要基于key认证,将jenkins生成的公钥配置在gitlab中,gitalb指定某个用户对某个项目有操做权限。
- 在gitlab上新建一个用户xiaoming,他属于myweb组
后面在jenkins上要使用xiaoming这个用户来进行测试发布 - jenkins上生成秘钥,将公钥复制到gitlab中的myweb项目中
[root@jenkins ~]# cat ~/.ssh/id_rsa.pub #复制不要有空格,不要有转行符,要写在一行,用记事本编辑 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjcEidAzdo3tdOXzVFyhLz2OH8q5WnIA3Rp1tWq/EGWHTcyxfw2orL+hRI3iJ41UoGZ2rvu/giglexL1uFyfIDxrSEarqTpnB6dfD6eT+n5sBRRDxdhHmmLxdCocpKeTYa/HaqTxibxiCgo1J9806SSVECAs0PJrjeLEETTpGAhbiyrpOkk1eWDfHa3U/qyaghyIaWNY0nSr5Q61/7OQ53XkYdQmCo5Q6ITmZvV0jCNvpeDNK+yvF83N2sdy/tV7b1hnMi7W0OLzFlrwOcuWQdDZEYdWRqO8R0XUZKBZTyp9hLivqBkbaaFzsPCubjDD/fPYelrznFmAH/4WxGOocn root@jenkins
- 在gitlab的project中,找到Deploy keys,将上面jenkins的公钥加入到上面
- jenkins测试用ssh的方式向gitlab拉取文件
[root@jenkins mnt]# git clone git@192.168.2.139:myweb/testweb.git Cloning into 'testweb'... The authenticity of host '192.168.2.139 (192.168.2.139)' can't be established. ECDSA key fingerprint is SHA256:KEONIDsIh3vnCDC9A8xDVvqr6QvSEdfCSEal1qaP95s. ECDSA key fingerprint is MD5:f7:bc:00:eb:6e:fe:9e:c2:8b:0a:98:d3:47:1c:9b:4c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.139' (ECDSA) to the list of known hosts. remote: Counting objects: 12, done. remote: Compressing objects: 100% (4/4), done. remote: Total 12 (delta 0), reused 0 (delta 0) Receiving objects: 100% (12/12), done. [root@jenkins mnt]# ls testweb #测试正常后将该目录删除了
jenkins经过配置用户拉取代码默认会保存在/var/lib/jenkins/workspace/目录下
- 将jenkins私钥配置到jenkins的web服务中,(gitlab放公钥,jenkins放私钥)
进入以后点击“Add Credentials”添加私钥:以下图,点击OK保存(私钥太长不贴出来了)
至此jenkins与gitlab关联和配置就作好了,接下来就能够在jenkins中构建项目了,一般咱们构建一个自由风格的项目
项目的构建工做主要就在这里配置,有不少配置项
配置源码管理,指定从哪里拉取代码
保存后返回首页就能够看到刚才建立的项目,能够构建项目测试看一下
构建完后能够查看构建过程当中的信息状态,看看是构建成功仍是失败
能够看到输出信息中最后一行提示为seccess
在jenkins服务端查看拉取的内容
[root@jenkins ~]# cd /var/lib/jenkins/workspace/test-demo [root@jenkins test-demo]# ls README.md