docker&Jkenkis&mavendocker. k8s

使用 GitLab + Jenkins 实现自动化构建

2018-11-15  本文已影响106人  anyesu

背景


在测试环境部署这块, 经历过以下几个阶段:

方案流程


流程图
  1. 开发提交代码
  2. 开发对需要发布的版本打上 Tag
  3. 触发 GitLabtag push 事件, 调用 Webhook
  4. Webhook 触发 Jenkins 的构建任务
  5. Jenkins 构建完项目可以按版本号上传到仓库、部署、通知相关人员等等

安装 GitLab


GitLab 官方文档已经介绍的比较详细了, 这里不再赘述, 下面给出最终调整过的 Docker Compose 配置:

gitlab:
  image: "twang2218/gitlab-ce-zh:11.0.2"
  restart: always
  hostname: 'gitlab'
  ports:
    - "10022:22"
    - "10080:10080"
    # postgresql端口
    - "5432:5432"
  volumes:
    - ./gitlab/data:/var/opt/gitlab
    - ./gitlab/log:/var/log/gitlab
    - ./gitlab/config:/etc/gitlab
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      # 仓库路径, 填写宿主机的域名或IP
      external_url 'http://192.168.xxx.xxx:10080'
      # 调整工作进程数减小内存占用,最小为2
      unicorn['worker_processes'] = 2
      gitlab_rails['time_zone'] = 'Asia/Shanghai'
      # 邮箱配置
      gitlab_rails['gitlab_email_from'] = '<your_email>'
      gitlab_rails['gitlab_email_display_name'] = '<your_email_name>'
      gitlab_rails['smtp_enable'] = true
      gitlab_rails['smtp_address'] = 'smtp.163.com'
      gitlab_rails['smtp_port'] = 25
      gitlab_rails['smtp_user_name'] = "<your_email_account>"
      gitlab_rails['smtp_password'] = "<your_email_password>"
      gitlab_rails['smtp_domain'] = 'smtp.163.com'
      gitlab_rails['smtp_tls'] = false
      gitlab_rails['smtp_openssl_verify_mode'] = 'none'
      gitlab_rails['smtp_enable_starttls_auto'] = false
      gitlab_rails['smtp_ssl'] = false
      gitlab_rails['smtp_force_ssl'] = false

      # 数据库配置
      gitlab_rails['db_host'] = '127.0.0.1'
      gitlab_rails['db_port'] = 5432
      gitlab_rails['db_username'] = "gitlab"
      gitlab_rails['db_password'] = "gitlab"
      
      postgresql['listen_address'] = '0.0.0.0'
      postgresql['port'] = 5432
      postgresql['md5_auth_cidr_addresses'] = %w()
      postgresql['trust_auth_cidr_addresses'] = %w(0.0.0.0/0)
      postgresql['sql_user'] = "gitlab"
      postgresql['sql_user_password'] = Digest::MD5.hexdigest "gitlab" << postgresql['sql_user']
      # 备份设置-保留7天
      gitlab_rails['backup_keep_time'] = 604800
    GITLAB_BACKUPS: "daily"
    GITLAB_SIGNUP: "true"
    GITLAB_ROOT_PASSWORD: "lb80h&85"
    GITLAB_GRAVATAR_ENABLED: "true"

说明:

安装 Jenkins


为了测试方便, 使用 Docker 化的 Jenkins , 如果需要调用一些特殊的命令或脚本就不是很方便, 实际使用过程中可以换成普通版的。Docker Compose 配置如下:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:2.151
    container_name: jenkins
    networks:
    - net
    user: "root"
    restart: always
    ports:
    - 9000:8080
    environment:
    - JAVA_OPTS="-Duser.timezone=Asia/Shanghai"
    volumes:
    - /etc/localtime:/etc/localtime:ro
    - ./data:/var/jenkins_home:rw
    - ./backup:/var/jenkins_backup:rw
# 网络配置
networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.23.0.0/16

说明:

配置 GitLab


注册账号什么的就不赘述了, 建一个测试项目 test , 随便 commit 几条内容

新建测试项目

按下图步骤创建账号的 access token , 用于 Jenkins 调用 GitLab 的 API

创建 access token 获取 access token

记下这里生成的 access token ( gRCtwVWU8cxwHdxxVZJD ) , 后面要用到。

配置 Jenkins


测试效果


可以在 GitLab 直接添加 Tag , 不过我觉得用 IDEA 上操作更方便点, 就把代码拉下来在本地操作

针对每个commit添加tag

然后使用快捷键 Ctrl + Shift + K 调出 Push 窗口 , 把 Tag 推送到 GitLab

push tag

回到 GitLab 页面可以看到触发了 Webhook , View details 查看请求详情, Response bodytriggered 字段值为 true 则表示成功触发了 Jenkins 进行构建

Webhook 触发历史

再看下构建结果

gitlab 查看构建结果 — 流水线 gitlab 中查看构建结果 — commits

注意: 每添加一个 Tag 就会触发一次事件, 不管是不是一起 push 的。所以一次 push 多个 Tag 会触发 Jenkins 进行多次构建。不过 Jenkins 已经做了处理, 默认串行执行任务(一个任务结束再执行下一个), 而且在构建前有一个 pending 状态, 此时被多次触发会进行合并, 并取首次触发的参数, 如下图所示:

同时触发多次事件

关于 Tag 的几点说明


未完待续


通过上面的步骤已经初步实现了想要的效果, 还有几个点后续可以再考虑下:

总结


以上就是对曾经踩过的一些坑进行的整合, 也没什么好总结的。总之, 合理地利用现有工具来解放双手, 就能有更多时间做其他想做的事!

时间有限一些基础的步骤就不细讲直接一笔带过了, 方案上可能有些细节方面也没考虑全, 欢迎评论留言。


转载请注明出处:https://www.jianshu.com/p/7e8037c63d63

上一篇 下一篇

猜你喜欢

热点阅读