自动化运维系列一:docker部署jenkins与gitlab

自动化运维系列一:docker部署jenkins与gitlab

  • 一:传统网站部署的流程
  • 二:目前主流网站部署的流程
  • 三:jenkins持续集成
    • 3.1 持续集成意义
    • 3.2 持续集成组件
  • 四:持续集成的部署
    • 4.1 环境准备
    • 4.2 docker部署gitlab
    • 4.3 docker部署jenkins
    • 4.4 Jenkins集成sonarqube

一:传统网站部署的流程

传统的网站部署,在运维过程中,网站部署是运维的工作之一,网站部署的流程大致分为:
需求分析—原型设计—开发代码—提交测试—内网部署—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。(如下图所示)
自动化运维系列一:docker部署jenkins与gitlab_第1张图片

二:目前主流网站部署的流程

目前主流网站部署方法,通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。
简单来说方便如下人员:

  1. 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、GIT仓库即可。
  2. 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新。
  3. 测试人员:可以通过jenkins进行简单的代码及网站测试。
    自动化运维系列一:docker部署jenkins与gitlab_第2张图片

三:jenkins持续集成

持续集成(Continuous Integration)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。

持续部署( continuous deployment )是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让engineering productivity 最大化。

持续交付( Continuous delivery , 缩写为CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成 ,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

3.1 持续集成意义

  1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

3.2 持续集成组件

  1. 一个自动构建过程,包括自动编译、分发、部署和测试;
  2. 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库;
  3. 一个jenkins持续集成服务器

四:持续集成的部署

4.1 环境准备

IP地址 系统 hostname 硬件配置 角色
172.17.2.239 CenOS7.4虚拟机 node01.ginvip.com 2 CPU 4G MEM gitlab
172.17.2.240 CenOS7.4虚拟机 node02.ginvip.com 2 CPU 4G MEM jenkins
172.17.2.241 CenOS7.4虚拟机 node03.ginvip.com 2 CPU 4G MEM jenkins从节点

Jenkins中文文档见:

https://jenkins.io/zh/doc/book/installing/#downloading-and-running-jenkins-in-docker

4.2 docker部署gitlab

首先安装docker-compose:

pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple/
docker-compose -v

docker-compose文件内容:

[root@node01 gitlab]# cat docker-compose.yml
version: '3'

services:
  gitlab:
    image: gitlab/gitlab-ce:10.8.4-ce.0
    container_name: gitlab
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - /data/gitlab_docker/data:/var/opt/gitlab
      - /data/gitlab_docker/logs:/var/log/gitlab
      - /data/gitlab_docker/etc:/etc/gitlab
      - /data/gitlab_docker/backups:/var/opt/gitlab/backups
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        #配置此参数,可以解决在创建项目时,gitlab以容器ID为域名的问题
        external_url 'http://172.17.2.239'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222

        gitlab_rails['manage_backup_path'] = true
        # 备份路径
        gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
        # 备份文件权限
        gitlab_rails['backup_archive_permissions'] = 0644
        # 备份保留时间 604800 = 7天
        gitlab_rails['backup_keep_time'] = 604800

        #gitlab_rails['smtp_enable'] = true
        #gitlab_rails['smtp_address'] = "smtp.163.com"
        #gitlab_rails['smtp_password'] = "授权码"
        #gitlab_rails['smtp_domain'] = "163.com"
        #gitlab_rails['smtp_authentication'] = "login"
        #gitlab_rails['smtp_enable_starttls_auto'] = true
        #gitlab_rails['smtp_tls'] = true
        #gitlab_rails['gitlab_email_from'] = '[email protected]'

        #nginx['enable'] = true
        #nginx['client_max_body_size'] = '10240m'
        #nginx['redirect_http_to_https'] = true
        #nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.cer"
        #nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.xxxx.com.key"
        #nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
        #nginx['ssl_prefer_server_ciphers'] = "on"
        #nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
        #nginx['ssl_session_cache'] = "builtin:1000  shared:SSL:10m"
        #nginx['listen_addresses'] = ["0.0.0.0"]
        #nginx['http2_enabled'] = true
        #postgresql['max_worker_processes'] = 8
        #postgresql['shared_buffers'] = "256MB"

上面注释了很多选项,可视个人情况开启。注意修改上面的IP地址选项
启动gitlab容器:

[root@node01 gitlab]# docker-compose up -d

4.3 docker部署jenkins

docker run \
--name jenkins \
--restart always \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v /data/jenkins_docker:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean

有个地方需要注意:在这里你不能用官方的Jenkins镜像,因为jenkins用户需有个地方需要注意:要属于docker用户组,这样才能使用socket,从而能在容器中的Jenkins调用docker,最终实现通过Jenkins构建和运行其他容器。
挂载docker.sock是让jenkins docker有权限操作宿主机上的docker

jenkins是纯文件存储,没有数据库,所有的数据都保存在xml文件中
jenkins会将所有的插件在启动时会读到内存中使用
浏览器访问:http://172.17.2.240:8080/
查看jenkins的管理员密码:

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

修改jenkins中的更新源:
直接访问页面 http://172.17.2.240:8080/pluginManager/advanced,在最下方的升级站点栏中修改URL为:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改 updates/default.json 配置文件(updates目录需要jenkins运行一会才会自动创建):

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

重启jenkins docker:

docker restart jenkins

4.4 Jenkins集成sonarqube

docker-compose文件内容:

version: '3'
services:
  sonarqube:
    image: sonarqube
    restart: always
    container_name: sonarqube
    ports:
      - '9000:9000'
      - '9092:9092'
    volumes:
      - /data/sonarqube_docker/data:/opt/sonarqube/data
      - /data/sonarqube_docker/logs:/opt/sonarqube/logs
      - /data/sonarqube_docker/extensions:/opt/sonarqube/extensions
# docker中运行的用户为sonarqube,uid,gid为999

启动容器后,浏览器访问:http://IP:9000,默认登录账号密码都为:admin,登录后生成一个token
自动化运维系列一:docker部署jenkins与gitlab_第3张图片
Jenkins集成sonarqube
自动化运维系列一:docker部署jenkins与gitlab_第4张图片
注意保存好生成的token,该token可见性只有这一次,退出该页面后该token不可见
回到jenkins页面,安装==SonarQube Scanner ==插件,进入到jenkins的系统设置
自动化运维系列一:docker部署jenkins与gitlab_第5张图片
自动化运维系列一:docker部署jenkins与gitlab_第6张图片
在Global Tool Configuration中配置sonarqube scanner:
自动化运维系列一:docker部署jenkins与gitlab_第7张图片
在jenkins job中使用sonarqube:
自动化运维系列一:docker部署jenkins与gitlab_第8张图片
自动化运维系列一:docker部署jenkins与gitlab_第9张图片
在Analysis properties中添加内容:

sonar.projectKey=demo
sonar.projectName=demo
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE

Jobs完成后,可到下面的URL查看代码检测结果:

http://172.17.2.240:9000/dashboard?id=demo		# demo为上面指定的sonar.projectKey

你可能感兴趣的:(Linux运维)