持续集成环境搭建

关于持续集成是什么,可以参考阮一峰老师的持续集成是什么?以及网上的一些资料。

基本环境搭建

从安装最Mini的CentOS开始,我们需要解决如下事情。

在CentOS中使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org *” 这是因为DNS配置错误,我装的是Cent OS 6.4 Server,没有图形界面,这个版本默认安装后,配置文件中没有配置DNS。需要通过更改配置文件来解决。方法如下:在命令提示符中输入vi /etc/sysconfig/network-scripts/ifcfg-eth0用vi 打开这个文件后,接下来会出现截图的内容, 其中要注意两个配置(按下面的值去设置)。

ONBOOT=yes
MM_CONTROLLED=no

安装一些常用的工具

yum install net-tools
yum install wget
yum install vim
yum install git

搭建Java环境

步骤1:验证是否安装了Java。java -version

步骤2:下载JDK。运行以下:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"

步骤3:安装下载好的JDK。rpm -ivh jdk-8u131-linux-x64.rpm

步骤4:设置环境变量。运行vim /etc/profile.d/java.sh,然后写入以下语句:

#!/bin/bash
JAVA_HOME=/usr/java/jdk1.8.0_131/
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME
export CLASSPATH=.

保存关闭,执行命令chmod +x /etc/profile.d/java.sh让它可以运行;最后执行命令source /etc/profile.d/java.sh让环境变量失效。

步骤5:验证。java -versionecho $JAVA_HOME

Jenkins搭建

步骤1:添加yum repos,运行以下命令,

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

步骤2:安装。yum install jenkins

步骤3:配置Jenkins文件。主要配置Jenkins的端口等,避免与其它软件冲突。主要方法如下:

$ sudo vim /etc/sysconfig/jenkins
# 修改运行端口为9999,默认为8080
JENKINS_PORT="8181"

重启Jenkins。sudo service jenkins start

步骤4:开启防火墙。

firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

步骤5:安装插件以及配置全局参数。

GitLab搭建

参考官方文档进行安装。

步骤1:安装必要的依赖

sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh

步骤2:下载

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

步骤3:配置与启动服务

sudo gitlab-ctl reconfigure

步骤4:修改端口以及地址。

1)修改Nginx端口以及地址监听的操作如下:

    在文件/etc/gitlab/gitlab.rb中修改:

    nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # listen on all IPv4 and IPv6 addresses
    nginx['listen_port'] = 8082

2)修改地址:在文件/etc/gitlab/gitlab.rb中修改,external_url '你想要的地址'

3)系统默认会用到8080端口作为启动时候的必须端口。
   如果不想用8080端口的话,可以通过这样的操作:在/etc/gitlab/gitlab.rb中修改unicorn['port']=端口号

4)运行sudo gitlab-ctl reconfigure

步骤5:登录。第一次登录GitLab的用户名密码为root和5iveL!fe。首次登录后会强制用户修改密码。

常用命令:

sudo gitlab-ctl start    # 启动所有 gitlab 组件;
sudo gitlab-ctl stop        # 停止所有 gitlab 组件;
sudo gitlab-ctl restart        # 重启所有 gitlab 组件;
sudo gitlab-ctl status        # 查看服务状态;
sudo gitlab-ctl reconfigure        # 启动服务;
sudo vim /etc/gitlab/gitlab.rb        # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab;
sudo gitlab-ctl tail        # 查看日志;

LDAP搭建

步骤1:安装

1)检查是否安装:rpm -qa | grep openldap

2)安装:

    yum install -y openldap openldap-clients openldap-servers migrationtools
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown ldap. /var/lib/ldap/DB_CONFIG
    systemctl start slapd
    systemctl enable slapd

3)验证端口:netstat -tlnp | grep slapd

步骤2:设置 OpenLDAP 的管理员密码

1)生成处理以后的管理员密码:

    [root@bogon ~]# slappasswd
    New password:
    Re-enter new password:
    {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

2)新建文件chrootpw.ldif。{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx为你在第1小步的时候生成的密码。

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

3)执行ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

步骤3:导入基本的Schema

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

步骤4:设置自己的Domain Name

1)首先要生成经处理后的目录管理者明文密码。

    slappasswd
    New password:
    Re-enter new password:
    {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

2)新建文件。chdomain.ldif,并把以下内容写入文件。(需要把"dc=***,dc=***"替换成你自己的dc内容,需要把{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx替换成刚才生成的密码)

    dn: olcDatabase={1}monitor,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
    read by dn.base="cn=Manager,dc=dynamax,dc=io" read by * none

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=dynamax,dc=io

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=Manager,dc=dynamax,dc=io

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by
    dn="cn=Manager,dc=dynamax,dc=io" write by anonymous auth by self write by * none
    olcAccess: {1}to dn.base="" by * read
    olcAccess: {2}to * by dn="cn=Manager,dc=dynamax,dc=io" write by * read

3)执行:ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

4)再新建文件:basedomain.ldif,并将以下内容写入。并将一些dc替换成你自己的

    dn: dc=dynamax,dc=io
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: Dynamax
    dc: Dynamax

    dn: cn=Manager,dc=dynamax,dc=io
    objectClass: organizationalRole
    cn: Manager
    description: Directory Manager

    dn: ou=people,dc=dynamax,dc=io
    objectClass: organizationalUnit
    ou: people

    dn: ou=groups,dc=dynamax,dc=io
    objectClass: organizationalUnit
    ou: groups

5)执行语句:ldapadd -x -D cn=Manager,dc=dynamax,dc=io -W -f basedomain.ldif (注意dc之类的替换)

步骤5:允许防火墙访问 LDAP 服务

firewall-cmd --add-service=ldap --permanent
firewall-cmd --reload

步骤6:查询。ldapsearch -x -b "dc=dynamax,dc=io" -H ldap://192.168.118.130

步骤7:安装客户端。选择有:phpLDAPadmin等。

Nexus搭建

Nexus现在为Nexus Repository Manager OSS 3.x。

安装

下载安装包:wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.4.0-02-unix.tar.gz

解压(我这边是解压到/usr/local中):sudo tar -zxvf nexus-3.4.0-02-unix.tar.gz

创建链接:sudo ln -s nexus-3.4.0-02 nexus

创建nexus用户:sudo useradd nexus

授权:

sudo chown -R nexus:nexus /usr/local/nexus
sudo chown -R nexus:nexus /usr/local/sonatype-work/

修改运行用户:

sudo vi /usr/local/nexus/bin/nexus.rc

# 修改一下内容
run_as_user="nexus"

修改端口号:
修改文件/usr/local/nexus/etc/nexus-default.properties中的application-port为你想要的端口号。

启动服务:在/usr/local/nexus/bin的目录下运行./nexus run &

注册为服务:

vi /etc/systemd/system/nexus.service

添加如下内容:

[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nexus/bin/nexus start
ExecStop=/usr/local/nexus/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target

安装并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable nexus.service
sudo systemctl start nexus.service

查看服务:

sudo systemctl status nexus.service

添加防火墙规则

Jenkins配置LDAP认证登录

简单介绍在Jenkins中使用LDAP进行认证的话需要哪些配置。

配置LDAP

在“系统管理 ”->“Configure Global Security”中,访问控制选择LDAP。为了预防能在万一配置不成功的情况下依然可以进行配置,可以先勾选上授权策略中的“ 任何用户可以做任何事(没有任何限制)”。

如下图配置LDAP:

jenkins_ldap_conf.png

配置详解:

  • Server:配置LDAP的服务器地址
  • root DN:配置根DN
  • User search base:配置用户开始查找的DN
  • User search filter:用户搜索过滤器,其实就是用户的登录标识
  • Group search base:配置用户的组查找的DN
  • Group search filter:组搜索过滤器,其实就是组名的标识
  • Manager DN:LDAP服务器的管理账号
  • Manager Password:LDAP服务器的管理密码

然后点击“Test LDAP settings”,然后输入用户名密码(注意,这边的用户名为uid的值)。查看是否LDAP的配置是正确的。

然后使用LDAP中的账号登录Jenkins。

授权策略

在LDAP中,我们新建2个Group(dev1和dev2),dev1组包含用户user1,dev2组包含用户user2。
也就是:

dn: ou=Group,dc=dynamax,dc=io
objectClass: organizationalUnit
ou: Group

dn: cn=dev1,ou=Group,dc=dynamax,dc=io
objectClass: posixGroup
objectClass: top
cn: dev1
memberUid: user1
gidNumber: 15107

dn: cn=dev2,ou=Group,dc=dynamax,dc=io
objectClass: posixGroup
objectClass: top
cn: dev2
memberUid: user2
gidNumber: 32679

在Jenkins中的配置如下:

jenkins_ldap_auth.png

注意:上图中红色框内的为选勾内容,蓝色框中的为必选内容。

项目授权策略

使用admin登录系统。新建2个job(dev1_job和dev2_job)。

jenkins_ldap_jobs.png

如上图所示,点击“配置 ”按钮,对项目(任务)进行设置。

如下图所示,dev1_job配置用户组为dev1,dev2_job配置用户组为dev2。

jenkins_ldap_job_auth.png

值得注意的是“ Block inheritance of global authorization matrix”一定要勾选。

然后,用user1和user2登录Jenkins验证是否完成配置。

GitLab配置LDAP认证登录

关于GitLab中搭配LDAP权限的操作可以参考GitLab的文档。

下面的内容是一些简单的配置,为了就是省去看英文文档的麻烦。

/etc/gitlab/gitlab.rb 或者 /home/git/gitlab/config/gitlab.yml 中添加以下内容:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-EOS # remember to close this block with 'EOS' below
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: '192.168.118.129'
port: 389
uid: 'uid'
method: 'plain' # "tls" or "ssl" or "plain"
allow_username_or_email_login: true
bind_dn: 'cn=Manager,dc=dynamax,dc=io'
password: 'gzhx0211'
active_directory: false
base: 'ou=People,dc=dynamax,dc=io'
user_filter: ''
EOS

然后运行以下命令让配置生效。
gitlab-ctl reconfigure

OK,这样以后你就可以使用LDAP的用户登录了。接下来问题来了,怎么分配角色呢?貌似CE版本没有提供,不过我们可以使用程序进行开发。

Nexus配置LDAP认证登录

在安装Nexus 3.3.2-02以后,默认的用户名为admin,密码为admin123。用admin登录Nexus。

在“Security”->”LDAP”中配置LDAP的信息。

配置连接

nexus_ldap_connect.png

点击“ Verify connection”如果连接成功则在屏幕的右上角弹出一个绿色的提示。

配置用户

如下图显示:

nexus_ldap_user.png

配置角色

如下图所示:

nexus_ldap_role.png

至此,CI需要的基本上就搭建OK了。剩下的Sonar和Jira等下次再搭建。