本文涉及一种利用容器部署 gitlab 和 jenkins 服务实现持续集成(CICD)的方法,其目的是为了在实际工作中使用代码托管及自动化操作。

一、引言

因工作需要,需部署 gitlab 和 jenkins 服务器进行 CICD 测试,换个高大上的名称,叫“组织革新”。本文记录个人的实践,但不涉及部署的具体步骤。

二、技术小结

  • 不同工程,配置不同,本文使用 C++ 工程为例进行实验。
  • 在配置 jenkins 时,建议经常使用页面下方的“应用”,随时保存设置好的参数,以防不测。

三、gitlab和jenkins联调

3.1 概述

实现CICD分几个阶段:使用 gitlab 托管代码,使用 jenkins 进行编译、打包以及发布。两个服务器各有项目对应,同时要进行必要的配置。不同项目,配置方式不尽相同。本节的配置原则上按顺序进行,因此会到 gitlab 和 jenkins 之间来回切换,故先行说明。

3.2 前置条件

3.2.1 允许本地网络请求

使用 root 用户登录 gitlab 服务器,在管理员配置选项选择**网络(Setting)页面,在外发请求(Outbound requests)**中,选择“允许Webhook和服务对本地网络的请求(Allow requests to the local network from web hooks and services)”,保存。如图1所示。

进行该设置的目的是因为本文的 gitlab 和 jenkins 服务均在同一物理服务器上使用 docker 部署。如果不设置,则在 gitlab 中设置 webhooks 时会提示Url is blocked: Requests to the local network are not allowed

说明:如果jenkins和gitlab不在同一服务器,则不需要进行此设置。

3.2.2 关闭 CSFR

进入 jenkins 容器,找到/usr/local/bin/jenkins.sh文件,找到 exec java 行,在-Duser.home="$JENKINS_HOME"后添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true,完整的一行语句如下:

exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@

说明:在笔者定制的 jenkins 镜像中已经进行该修改了。

进行该设置,是因为高版本 Jenkins 无法在界面关闭跨站请求伪造保护(CSRF),因为在 gitlab 进行 webhooks 时会认证失败。提示:

 Hook executed successfully but returned HTTP 403

关闭之后,再次进行 CSFR 页面,提示:

This configuration is unavailable because the System property hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION is set to true.

说明修改成功。

对于物理机部署的 jenkins,则在 /etc/sysconfig/jenkins 文件中找到 JENKINS_JAVA_OPTIONS, 设置如下:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"

3.3 准备 gitlab 仓库

本文使用仓库地址为 http://10.8.18.168:8888/latelee/ci_test

3.4 配置 jenkins 项目

3.4.1 新建项目

在 jenkins 首页左侧,点击“新建任务”,输入项目项目,选择第一项“自由风格软件项目”。

点击“确定”进入配置页面。

3.4.2 指定git仓库

源码管理选项页面中,输入 gitlab 仓库地址,注意,URL 地址后须添加.git后缀。

点击“添加”->Jenkins,添加凭据,默认类型为用户名和密码。

添加后,选择添加的凭据,红色错误提示消失。

3.4.3 设置触发条件

构建触发器页面进行触发器的选择。此处有多种方式可选,如定时构建和指定 gitlab 方式。

勾选“Build when a change is pushed to GitLab.”。注意,该项后面的 URL 地址需要记住,在 gitlab 中将使用。点击“高级”,在“Secret token”处点击“Generate”,生成 token,该 token 亦需要记住。

进行此设置目的是,当提交代码到 gitlab 仓库时,会自动触发 jenkins 执行 一次构建。触发条件在对应 gitlab 仓库中进行设置。如果不需要自动触发,则可以不触发条件。

3.4.4 指定构建步骤

构建页面,点击“增加构建步骤”,选择“执行shell”,输入构建的命令。

3.4.5 指定构建后的步骤

构建后操作页面,点击“增加构建后操作步骤”。选择“send build artifacts over SSH”。选择服务器、源目录、目标目录及执行的命令。注意,在本文实践前已经设置好服务器及目标,故只指定源文件和执行命令即可。

在笔者实践中发现,在“构建环境”、“构建”、“构建后操作”三个页面均可以选择将文件通过 SSH 发送服务器。

3.5 设置 gitlab 的 webhooks

在 gitlab 项目http://10.8.18.168:8888/latelee/ci_test页面, 选择“Settings”->“Webhooks”,输入上小节生成的 URL 和 token。

点击页面下方“Add webhook”,添加。

注:同一个gitlab仓库,可支持多个 webhook。

点击“Test”,选择“Push events”,进行测试验证。为保证触发成功,强烈建议在此处先行测试

触发类型有很多种,根据实际情况选择。

3.4 验证

提交代码到 gitlab 仓库(此处从略)。稍等片刻,在 jenkins 工程的看到进行了触发。

输出日志如下:

编译、运行、执行ssh远程服务均成功。在远程服务器的/tmp目录出现a.outlog.txt

我的docker随笔37:使用gitlab和jenkins实现CICD相关推荐

  1. Gitlab与Jenkins构建CICD环境

    一.概述 1.CI 持续集成 持续集成:持续集成(continuous integration)是指开发者在代码开发过程中,可以频繁将代码部署集成到主干,并进行自动化测试 持续交付:是指在持续集成的基 ...

  2. 我的docker随笔34:gitlab服务部署

    本文涉及一种在容器中部署 gitlab 服务的方法,并结合其自带的 gitlab-runner 实现 CICD 功能.其目的是为了在实际工作中使用代码托管及自动化操作. 一.引言 因工作需要,需部署 ...

  3. 记录使用docker容器技术搭建gitlab与jenkins

    目录 一.安装Xshell和Xftp 二.安装docker容器 三.安装docker-compse 四.通过docker-compose.yml 安装镜像容器 1.示例安装mysql 2.jenkin ...

  4. Linux 环境安装 Node、nginx、docker、vsftpd、gitlab

    Linux 环境安装 centos7 # 更新yum yum update -y 0. 防火墙 firewalld 新入的JD云服务器,发现防火墙默认是关闭的. # 查看防火墙状态 systemctl ...

  5. (六)构建Docker私有仓库、Gitlab仓库和持续集成环境

    环境说明 IP 功能 eth0:192.168.124.139 eth1:172.16.100.10 Docker私有仓库.Gitlab.持续集成 eth0:192.168.124.138 eth1: ...

  6. Docker搭建自己的GitLab

    Docker搭建自己的GitLab docker 介绍 **GitLab: ** GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 **Do ...

  7. 我的docker随笔35:jenkins服务部署

    本文涉及一种在容器中部署 jenkins 服务的方法,后续将其与 gitlab 配合以实现 CICD 功能.其目的是为了在实际工作中使用代码托管及自动化操作. 一.引言 因工作需要,需部署 jenki ...

  8. 我的docker随笔8:docker容器相互访问

    很多时候,同一台机器上,需要运行多个docker容器,前文提到的docker-compose就是方便同时管理多个容器的工具,那么,容器与容器之间如何访问.通信呢?本文对此问题进行探讨. 方式一:内部网 ...

  9. 我的docker随笔5:docker-compose的安装与使用

    layout: post category : docker容器 tags : [docker] 由前文知,运行容器的命令比较简单,但是,当有复杂的应用时,比如设置环境变量.挂载目录.映射端口,命令就 ...

最新文章

  1. 使用autoconf完成编译配置
  2. ubantu之Git使用
  3. 【计算机网络复习 数据链路层】3.4.4 选择重传协议(SR)
  4. 高考失常错过清华,而今保送清华直博,还发了数篇 Nature
  5. Pytorch torch.mean()的简单用法
  6. sencha touch 2中list控件分组排序
  7. c语言程序设计 实验五数组,C语言实验五 数组程序设计(二)
  8. KEIL MDK中的RO、RW和ZI DATA理解及KEIL中ROM和RAM使用大小计算
  9. 紧跟步伐,何恺明新作MAE复现历程
  10. 360无线wifi路由器连接到服务器,360无线路由器怎么有线桥接设置
  11. sql 中英文格式的时间转数字格式
  12. windows录音程序原理
  13. 数字图像处理——红眼去除(Python)
  14. 怎么快速学习英语的诀窍
  15. sklearn机器学习:泰坦尼克号幸存者的预测
  16. java 分析内存_Java 内存查看与分析
  17. 2.Matlab图像坐标变换
  18. 66亡灵app隐私政策
  19. 前天说灰度拉盘,昨天说灰度砸盘,今天我们给你个准信
  20. linux more 下一页_Linux more命令详解

热门文章

  1. realme GT Neo3重磅细节曝光:首发150W快充 5分钟充50%
  2. 2699!Redmi Note 11潮流限定版再次发售:全球首发“全系悬浮工艺”
  3. 被指涉嫌“二选一” 山姆回应:欢迎良性竞争
  4. 研究机构:特斯拉Model 3是2月份最畅销电动汽车
  5. 男子拒绝春节带电脑回家工作被开除,最后结果十分舒适...
  6. 国家邮政局:对刷单、贩卖快递盲盒等进行清理整顿
  7. 消息称Uber正洽谈出售旗下自动驾驶部门ATG给Aurora
  8. 北京移动联合中兴通讯率先完成SON 4/5G全制式规模部署
  9. 滴滴拼车更名“青菜拼车” 或将独立运营
  10. 新款iPhone SE预购好于预期,新款iPhone SE Plus可能要因此延迟了