• Gitlab与Jenkins结合构成持续集成(CI)环境


    Jenkins概述:

      Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作。

      官方网址:https://jenkins.io/

     

     Gitlab概述:

      Gitlab是一个可以实现自托管的Git项目仓库,可通过web界面进行访问公开的或者私人项目。

      Gitlab拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。

      Gitlab中文网:https://www.gitlab.cc/installation/#centos-7

    Gitlab与GitHub的区别:

      从代码私有性方面来看,有事公司并不希望员工获取到全部的代码,这个时候Gitlab是一个很好地选择,但是对于开源项目来说,GitHub依旧是代码托管的首选。

      Git相关概念:

        git    是一个版本控制系统,是一个命令,是一个工具

        gitlab   是用于实现 git 功能的开发库

        GitHub  是一个基于git实现的在线代码托管仓库,报刊一个网站界面,向互联网开放

        gitlab    是一个基于git实现的在线代码仓库托管软件,一般用于在企业内部网络搭建 git 私服

        注:gitlab-ce 社区版    gitlab-ee 企业版 收费

    1.1、搭建Gitlab 平台

    实验环境:CentOS7.4  虚拟机需要6G,否则可能会导致后期运行内存不够用

    1.2、安装Gitlab需要的组件:

    [root@c763 ~]#yum install curl policycoreutils openssh-server openssh-clients postfix -y

     这里选择postfix发送邮件

    [root@c763 ~]#systemctl enable postfix
    [root@c763 ~]#systemctl start postfix
    [root@c763 ~]# iptables -F #清空规则
    [root@c763 ~]# systemctl stop firewalld
    [root@c763 ~]# systemctl disable firewalld
    禁止防火墙,就不用执行下面两条命令:
    [root@c763 ~]#firewall-cmd --permanent --add-service=http
    [root@c763 ~]#systemctl reload firewalld

     1.3、安装Gitlab

      下载gitlab的两种方法:

      方法一:使用yum可以下载,推荐清华大学开源软件镜像,可以用迅雷下载一下链接:

    https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

      上传到 gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm 到 linux 系统上

    [root@c763 ~]# rpm -ivh gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm #安装 

       方法二:配置yum 源,使用yum安装:

    [root@c763 ~]# yum install gitlab-ce -y #安装太慢。下面使用清华的源: 
    [root@c763 yum.repos.d]# cat gitlab_gitlab-ce.repo 
    [gitlab-ce] 
    name=gitlab-ce 
    baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 
    repo_gpgcheck=0 
    gpgcheck=0 
    enabled=1 
    gpgkey=https://packages.gitlab.com/gpg.key 
    [root@c763 ~]# yum install gitlab-ce -y 

    配置gitlab 域名:

    [root@c763 ~]# vim /etc/gitlab/gitlab.rb #修改 gitlab 外部访问地址 
    改:13 external_url 'http://gitlab.example.com' 
    为:13 external_url 'http://192.168.1.63' 
    注:这里必须修改,不然后后期访问时,用户到地址是:http://gitlab.example.com/xxxx ,根本 
    不能访问。 修改后获得是: http://192.168.1.63/xxxx 

     配置好后重启Gitlab

    [root@c763 ~]# gitlab-ctl reconfigure #重新配置应用程序。修改了 gitlab 服务配置文 
    件后,都需要执行一下这个命令。让各个服务的配置文件,重新加载一下配置文件。这里等个 2 分钟左右。 
    。。。 
    Running handlers: 
    Running handlers complete 
    Chef Client finished, 2/501 resources updated in 37 seconds 
    gitlab Reconfigured! 
    [root@c763 ~]# gitlab-ctl status 
    [root@c763 ~]# gitlab-ctl status #可以使用 gitlab-ctl 管理 gitlab,例如查看 gitlab 状 
    态: 
    run: gitlab-workhorse: (pid 3275) 169s; run: log: (pid 3151) 280s 
    run: logrotate: (pid 3169) 273s; run: log: (pid 3168) 273s 
    run: nginx: (pid 3157) 279s; run: log: (pid 3156) 279s 
    run: postgresql: (pid 3009) 349s; run: log: (pid 3008) 349s 
    run: redis: (pid 2926) 360s; run: log: (pid 2925) 360s 
    run: sidekiq: (pid 3142) 287s; run: log: (pid 3141) 287s 
    run: unicorn: (pid 3110) 293s; run: log: (pid 3109) 293s 
    [root@c763 config]# netstat -antup | grep :80 
    tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 
    10864/unicorn maste 
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 
    10729/nginx: master 
    默认使用 nginx 做为 web 服务器。 
    注:如果后期 web 界面访问时,总报 502,要把防火墙清空规则,另外内存要大于 4G,不然后内存 
    不足,也报 502

     

    [root@c763 ~]# iptables -F #清空规则 
    [root@c763 ~]# free -m #已经使用 4G 以上内存 
    total used free shared buff/cache available 
    Mem: 5817 4187 133 80 1496 1198 

     1.4、登录Gitlab

      http://192.168.1.63/users/sign_in

    第一次登录 gitlab,需要为 root 用户修改密码,root 用户也是 gitlab 的超级管理员,输入新密码:xxxxxxxx,密码不要太过简单

     密码改完后重新登录一下:

    使用 root 用户和刚才创建的密码登录gitlab:

    登录:http://192.168.1.63/   用户名: root 密码:xxxxxxxx

     

     到此,gitlab搭建成功

     1.5、管理 gitlab 

    关闭gitlab: # gitlab-ctl stop
    
    启动gitlab: # gitlab-ctl start
    
    重启gitlab: # gitlab-ctl restart
    
    gitlab主配置文件: /etc/gitlab/gitlab.rb //可以自定义一些邮件服务等
    
    日志地址: /var/log/gitlab/   // 对应各服务
    
    服务地址: /var/opt/gitlab/   // 对应各服务的主目录
    
    仓库地址: /var/opt/gitlab/git-data  //记录项目仓库等提交信息
    
    重启服务: gitlab-ctl stop/start/restart //启动命令

    1.6、注册新用户和关闭gitlab注册功能

    退出root用户。默认情况下可以直接注册账号。

    http://192.168.163/users/sign._in开始注册

     关闭gitlab注册功能:

     以root用户登录: http://192.168.1.63/users/sign_in点Admin area >> setting >> 取消sign-up enabled标签前对勾

     勾选完在此网页的最后,点save:

    测试,清空历史浏览缓存,发现已经关闭了注册功能

     

     1.7、CentOS7 部署汉化版 gitlab 10.2.3

    下载最新的汉化包:

    [root@c763 ~]# git clone https://gitlab.com/xhang/gitlab.git 
    如果是其他版本需要添加上所需要的分支
    [root@c763 ~]# git clone https://gitlab.com/xhang/gitlab.git -b v10.2.3-zh

    可以直接上传本地gitlab-patch到服务器

    [root@c763 ~]# tar zxvf gitlab-patch-zh.tat.gz 
    扩展:汉化的方法,就是直接把汉化过的 web 页面调换原来的页面 
    [root@c763 ~]# gitlab-ctl stop #关闭服务 
    # /usr/bin/cp -rvf /root/gitlab/* /opt/gitlab/embedded/service/gitlab-rails/ 
    直接把汉化好的文件替换了源文件中 gitlab-rails 下的文件。gitlab-rails 下面存放的都是 web 
    界面相关的文件 
    复制时可能不断提示是否要覆盖,所以我们直接使用 cp 命令,因为系统中的 cp 命令是实际是“alias cp=’cp -i’”的别名 
    -v 显示复制的过程 
    -f 强行复制 
    [root@c763 gitlab]# gitlab-ctl restart #重启服务,等 1 分钟,再去访问 web 页面,访问太快会显示 502 错误。 

     登录汉化版本: http://192.168.1.63/profile

     1.8、gitlab日常使用:

      一、新建项目

      先创建项目所在的组,选择Admin area

     选择group----new group

      http://192.168.1.63/projects/new

     选择创建新项目(New project),然后输入项目名称,同时在namespace 里选择刚才创建的组

     

    Visibility Level(项目可见级别):

    1、Private(私有的,只有你自己戒者组内的成员能访问)

    2、Internal(所有登录 gitlab 平台的用户都可能访问)

    3、Public(公开的,所有人都可以访问)三种选项。即不登录 gitlab 也可以访问

    注:稍后我们会设置一个公钥,这样就可以无交互,直接上传戒下载代码了。就像 ssh 无密钥登录一样。这样方便后期迚行 jenkins 自劢部署 

      二、创建用户

      选择 Admin area

       选择users --- new users

     其中Name为对方的中文名,Username是登录用户名,一般可以设置成邮箱的前缀,Email为公司邮箱

     项目默认,创建一个普通用户

     信息输入完成后,选择Create User,基本资料可以不写

      三、重置用户密码

    登录刚才设置好的邮箱地址,xxxx@163.com  有时可以收到邮件,有时候也会收不到(不是很明细)

     按照要求重新设置密码,最好是复杂点,8位数以上

    生成密码后登录即可

    配置 STMP 邮件发送服务 这个方法更可靠,但是有时也会收不到邮件

    编辑/etc/gitlab/gitlab.rb 文件,配置 STMP 邮件发送服务。前提你的邮件已经开通 stmp/pop3收发功能

    [root@c763 ~]# vim /etc/gitlab/gitlab.rb #在 430 行插入 
    432 gitlab_rails['smtp_enable'] = true 
    433 gitlab_rails['smtp_address'] = "smtp.163.com" 
    434 gitlab_rails['smtp_port'] = 25 
    435 gitlab_rails['smtp_user_name'] = "zhoujiangtao@163.com" 
    436 gitlab_rails['smtp_password'] = "自己邮箱的密码" 
    437 gitlab_rails['smtp_authentication'] = "login" 
    438 gitlab_rails['smtp_enable_starttls_auto'] = true 
    439 gitlab_rails['smtp_tls'] = true 
    440 gitlab_rails['gitlab_email_from'] = 'zhoujiangtao@163.com' 

    设置gitlab开机自动启动

    systemctl enable gitlab-runsvdir.service 
    systemctl restart gitlab-runsvdir.service 
    [root@c763 gitlab]# gitlab-ctl restart 

    已发送邮件的方式,有时可以收到邮件,也有时会收不到,不是很及时

    第二个方法

    以root管理员账号直接修改密码,这个方法有效

      1、选择Admin area >> 用户 >> 选中用户 然后编辑

      2、编辑后保存 save

      四、删除用户

      1、当这个人离职的时候,为了安全起见,需要删除对方的gitlab权限,避免机密信息丢失

      选择 用户>>编辑>>删除用户(如果想把用户和其他记录都删掉,就选择删除用户和贡献)

      2、把用户zhoujiangtao添加到  刚才建的组中,身份选择“主程序员”,这样后期就尅提交代码了

      注:“开发人员” 会没有权限提交代码

    选择群组>> 点击刚才的建组,然后添加用户到群组

    五、在项目中添加一个文件index.html

    点击添加 +  会有一个new file

     

     2.1、安装git客户端使用gitlab

    2.2、安装git并clone代码

    [root@c763 ~]# yum install git -y 
    #下载地址,可以从这里获得 
    [root@c763 ~]# git clone http://192.168.1.63/jiang/jiang-web.git 
    正克隆到 'jiang-web'... 
    Username for 'http://192.168.1.63': zhoujiangtao
    Password for 'http://zhoujiangtao@192.168.1.63': xxxxxxxx 
    [root@c763 ~]# cd jiang-web/ 
    [root@c763 jiang-web]# ls 
    index.html 
    注:后期可以部署 ssh 公钥,实现不输入密码直接下载和上传代码。

     2.3、 初次运行 Git 前的配置

    一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会

    沿用现在的配置。

    第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用

    这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。

    git 运行的环境变量有点像.bashrc,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以

    存放在以下两个的地方:

      1、~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global选项,读写的就是这个文件。

    1:修改用户信息

    [root@c763 ~]# git config --global user.name "zhoujiangtao"
    
    [root@c763 ~]# git config --global user.email "zhoujiangtao@163.com"
    
    [root@c763 ~]# cat ~/.gitconfig #上面两条命令会生成~/.gitconfig
    
    [user]
    
    email = zhoujiangtao@163.com
    
    name = zhoujiangtao 

      2、当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。

    每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 ~/.gitconfig 中的同名变量。

      如果要在某个特定的项目中使用其他名字戒者邮件地址,先迚到项目上下,然后只要去掉 --global 选项重新配置即可。

    最后配置的用户和邮件地址会保存在当前项目的 .git/config 文件里。

    例:修改某个 git 项目下的环境变量

    [root@c763 jiang-web]# cd jiang-web/
    
    [root@c763 jiang-web]# vim ./.git/config #先查看一下,里面没有 user.name
    
    和 user.email
    
    [root@c763 jiang-web]# git config user.name "zhoujiangtao"
    
    [root@c763 jiang-web]# git config user.email "zhoujiangtao@163.com"
    
    [root@c763 .git]# vim ./.git/config
    
    ...
    
    [user]
    
    name = zhoujiangtao
    
    email = zhoujiangtao@163.com

     2.4、git 常用命令

    git config --global user.name “name“ #设置全局用户名 
    git config --global user.email mail #设置全局邮箱 
    git config --global --list         #列出用户全局设置 
    git add index.html                #添加文件到暂存区 
    git commit -m “描述内容“        #提交文件到工作区 
    git status             #查看工作区的状态 
    git push             #提交代码到 git 服务器上 
    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 #从服务器更新某个那文件覆盖本地的文件 

    例如:把修改过的index.html文件更新到主版本中

    [root@c763 test]# cd jiang-web/ 
    [root@c763 jiang-web]# echo "bbs.jiang.cn" >> index.html 
    [root@c763 jiang-web]# git add index.html 
    [root@c763 jiang-web]# git commit -m "add bbs.jiang.cn" 
    [root@c763 jiang-web]# git push -u origin master #上传到 master 主干下 
    [root@c763 jiang-web]# rm -rf index.html #初除一些代码 
    [root@c763 jiang-web]# git reset --hard HEAD #回滚到最新版本 
    [root@c763 jiang-web]# ls 
    [root@c763 jiang-web]# git reflog #获取每次提交的 ID 
    9c1e21a HEAD@{0}: commit: aaa 
    cd9d1d5 HEAD@{1}: commit: add bbs 
    b2866fd HEAD@{2}: clone: from http://192.168.1.63/jiang/jiang-web.git 

    3.1、工作区和暂存区以及分支概述

    3.1.1、 工作区就是编辑文件的目录区域,需要将工作区的修改好的文件 add 到暂存区才能提交到 git 服务器,在工作区有多个文件的时候可以将一个戒多个文件添加至暂存区,再提交到 git 服务器即可。

    3.1.2、在服务器创建分支

    [root@c763 jiang-web]# git branch bbs #创建一个分支 
    [root@c763 jiang-web]# git checkout bbs #切换到分支 bbs 
    [root@c763 jiang-web]# git branch #查看当前所处的分支 
    [root@c763 jiang-web]# echo aaa > a.txt #随意在里面写一些内容 
    [root@c763 jiang-web]# git add a.txt 
    [root@c763 jiang-web]# git commit -m "add a.txt" #提交到暂存区中 
    [root@c763 jiang-web]# git push -u origin bbs #上传到分支 bbs 分支上 

    图解:

    关于 git push.default 设置的几个关键点

    默认配置下,当使用 git push 命令而没有明确的指名本地分支和进程参考分支的情冴下,会有如上的提示。如果 git push 命令没有明确指定引用规格(refspec),也就是没有指定推送的源分支和目标分支, 那么 git 会采用 push.default 定义的劢作。不同的值适用于不同的工作流程模式。

      显而易见,主要是因为之前没有进行设置引用规格才出现的这种问题,现在我把 push.default的可用值与配置方法贴在下面。push.default 可用的值如下:

        1.nothing 不推送任何东西并有错误提示,除非明确指定分支引用规格。强制使用分支引用规格来避免可能潜在的错误。

        2.current 推送当前分支到接收端名字相同的分支。

        3.upstream 推送当前分支到上游@{upstream}。这个模式只适用于推送到不拉取数据相同的仓库,比如中央工作仓库流程模式。

        4.simple 在中央仓库工作流程模式下,拒绝推送到上游与本地分支名字不同的分支。也就是只有本地分支名和上游分支名字一致才可以推送, 就算是推送到不是拉取数据的进程仓库,只要名字相同也是可以的。在 GIT 2.0 中,simple 将会是 push.default 的默认值。 simple 只会推送本地当前分支。

        5.matching 推送本地仓库和进程仓库所有名字相同的分支。这是 git 当前版本的缺省值。

       配置 push.default 的命令如下: git config --global push.default simple

    4.1、搭建Jenkins实现持续集成

    4.1.1、安装jdk环境,Jenkins是Java 编写的,所以需要先安装jdk,这里采用yum安装(如果版本有需求,可以直接在Oracle官方下载jdk)

    [root@c763 ~]# yum install -y java-1.8.0-openjdk #光盘镜像中有,也可以 rpm 直接安装 

    4.1.2、安装Jenkins

      方法一:直接上传rpm包到服务器,并安装

    [root@c763 ~]# rpm -ivh jenkins-2.93-1.1.noarch.rpm 

      方法二:在线安装

    [root@c763 ~]# cd /etc/yum.repos.d/ 
    [root@c763 yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo 
    [root@c763 yum.repos.d]# rpm --import 
    http://pkg.jenkins.io/redhat/jenkins.io.key 
    [root@c763 yum.repos.d]# yum install -y jenkins #安装 jenkins 

    4.2、新版Gitlab的服务端口为8080,为了不和Gitlab端口冲突,修改Jenkins的端口为其他数值

    [root@c763 config]# netstat -antup | grep :80 
    tcp   0   0   127.0.0.1:8080 0.0.0.0:* LISTEN 10864/unicorn maste 
    tcp   0   0   0.0.0.0:80   0.0.0.0:* LISTEN 10729/nginx: master 
    [root@c763 yum.repos.d]# vim /etc/sysconfig/jenkins 
    改:29 JENKINS_USER="jenkins" 
    为:29 JENKINS_USER="root" #以 root 
    
    改:56 JENKINS_PORT="8080" 
    为:56 JENKINS_PORT=" 198 " 
    [root@c763 ~]# /etc/init.d/jenkins start #启劢 
    [root@c763 ~]# chkconfig jenkins on #设置开机启劢 
    [root@c763 ~]# chkconfig --list jenkins 

    4.3、访问Jenkins并安装相关插件

    [root@c763 jenkins]# iptables -F # 要清空防火规则,还要关闭 selinux 
    开始正常使用:http://192.168.1.63:198

    首先需要解锁Jenkins

    [root@c763 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword #查看刜始化密码文件

    然后选择安装插件,这里安装通用的社区插件即可,其他用到的时候再安装也不迟

     确保插件安装成功

    然后创建用户名,密码,全名,电子邮箱地址

    完成Jenkins的安装

    5.1、插件管理

    5.1.1、安装成功后,登录系统进行管理

     系统管理  -> 插件管理 -> 高级

     

     

     

     5.2、插件下载地址:

      方法一:网址:https://jenkins.io/ 点击跳转

     下载好后,再把自己需要的插件本地上传

      方法二:可以把一台安装好的Jenkins插件服务器的   /var/lib/jenkins/plugins  目录下的文件复制到新的Jenkins中

    把准备好的插件解压一下: 
    [root@c763 jenkins]# tar czvf plugins.tar.gz plugins/ 
    #cd /var/lib/jenkins/ 
    #rm -rf /var/lib/jenkins/plugins 
    #tar -zxvf plugins.tar.gz     #上传 plugins.tar.gz 到服务器上,解压
    #chown jenkins.jenkins ./* -R 
    #/etc/init.d/jenkins restart 
    注:记得重启 jenkins,这个非常重要,因为不重启,插件不会生效 
    登录 gitlab     http://192.168.1.63/ 用户名:root 密码: xxxxxxxx
    登录 jenkins http://192.168.1.63:198/ 用户名: admin 密码: 123456 
    注:虚拟机做好后创建一个快照 

    完成! 

     
    持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,
    并进行自动化测试  >>>  开发  >>> 代码编译  >>> 测试
    持续交付:持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境。
    持续部署:在持续交付的基础上,把部署到生产环境的过程自动化。 
    从而实现整个流程
  • 相关阅读:
    java oop第09章_JDBC02(CRUD操作)
    java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串
    Java oop第08章_JDBC01(入门)
    java 数组中的数值反转输出
    java oop第07章_集合框架
    Java oop创建自定义异常
    java oop遍历List和Map的几种方法
    java oop第06章_异常处理
    Java oop第05章_多态、接口
    信开发 新浪SAE开发平台 验证Token 一直失败
  • 原文地址:https://www.cnblogs.com/security-guard/p/12425606.html
Copyright © 2020-2023  润新知