二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

    • Jenkins入门系列笔记汇总整理
    • 前言与介绍
    • Jenkins初始部署与简单配置
    • Jenkins各配置选项介绍
    • Jenkins中一个项目的构建
    • Jenkins配置项目构建的钉钉通知
    • Jenkins忘记管理员密码怎么办
    • Jenkins与gitlab的交互探微
    • Jenkins根目录详解
    • Jenkins插件之显示构建时间
    • Jenkins插件之批量修改配置
    • Jenkins配置简单构建邮件推送
    • Jenkins复杂邮件推送配置详解
    • Jenkins配置复杂构建邮件推送
    • Jenkins构建安卓项目之前的一些唠叨
    • Jenkins构建安卓项目配置
    • Jenkins与Gitlab分支的交互
    • Jenkins构建nodejs项目
    • 使用docker部署Jenkins及初始配置
    • 配置gitlab提交代码Jenkins自动构建
      • 1,闲言碎语。
      • 2,先在 gitlab 上操作。
        • 1,在 gitlab 创建测试项目。
      • 3,将 Jenkins 的公钥放入 gitlab 中,测试是否可以进行拉取代码。
      • 4,ok,现在我们去创建一个项目进行测试。
        • 1,先添加这样一个 ssh server。
      • 5,将刚才的 Jenkins api 添加到 gitlab 中。
      • 6,试验。
      • 7,补充内容,分支的探索。
    • Jenkins回滚方案探微
    • Jenkins角色控制(小黄锁)探微
    • Jenkins构建的应用配置问题解决探微
    • Jenkins构建中tag的应用
    • Jenkins插件之Ansicolor(神器)
    • 最基础核心的Jenkins功能部署一个java应用
    • Jenkins+sonar构建代码扫描
    • Jenkins+docker+gitlab将应用部署到docker
    • Jenkins参数化构建犀利插件Active-Choices-Plugin
    • 记一次将代码中参数外显到构建历史中的操作
    • Jenkins升级与迁移的经验分享
    • pipeline笔记之从一个简单的项目构建开始
    • Jenkinsfile声明式语法详解
    • 自动构建的原始配置以及pipeline中的用法
    • 多分支构建的实践与思考
    • 使用Jenkinsfile类前端项目的部署与回滚
    • 如何在Jenkinsfile中定义一个全局的时间戳变量
    • Jenkins中自由风格回滚方案的最佳实践
    • Jenkins中pipeline风格回滚方案的最佳实践
    • pipeline结合ansible剧本进行批量的部署与回滚配置
    • 最近配置安卓iOS打包本地化流程中一些值得记录的内容
    • pipeline中如何在environment环节声明一个含有通配符的变量
    • git-Parameter插件在pipeline共享库中的实践详解
    • jenkins作为ci检测代码是否合并的实践
    • 将Jenkins共享库的Jenkinsfile放到ci静态检测的实践
    • Jenkins的pipeline实践之GitSCM参数配置项详解
    • Jenkins中pipeline对接CMDB接口获取主机列表的发布实践
    • Jenkins有任务无法kill提示即将关闭
    • Jenkins基于Share Library共享库的最佳实践探索
    • Jenkins结合MySql Database插件的平台化实践思路
    • Jenkins-Groovy中三元表达式的用法
    • Jenkins-Groovy中Switch的高阶用法
    • Jenkins-pipeline之利用activity choice插件对接查询MySQL数据实现动态参数化的功能
    • CentOS通过yum快速安装Jenkins
    • Jenkins-pipeline语法之错误处理详解(文末有干货)
    • Jenkins常用插件汇总以及简单介绍
    • Jenkins所遇报错汇总及解决
    • Jenkins管理维护运维规范
  • ELK笔记

  • Kubernetes笔记

  • LLM专题

  • 系列专题
  • Jenkins系列文章
二丫讲梵
2018-06-04
目录

配置gitlab提交代码Jenkins自动构建

文章发布较早,内容可能过时,阅读注意甄别。

# 1,闲言碎语。

承接上一篇文档以及在上篇所配置好的环境,继续往前走,模拟开发提交代码之后,Jenkins 自动构建的试验。

之前从来没有做过自动构建的事情,有时候听着别人说如何如何,开发提交之后就构建了,好像很不一般。

自己知道是如何实现的,但是总觉得好像有局限,就没有前去涉猎,但是今天根据教程看了之后,发现有些事情呀,或者有些偏见呀,都是来自于一些小的,基础的不能在基础的东西。因为你不懂某个小基础,那么,可能蝴蝶效应的,后续很多东西你也就无从知起。

好了,进入正题。

这里主要展示以下内容。

  • 1,模拟程序员拿到项目之后的一系列操作与使用。(即程序员与 gitlab 的交互)
  • 2,配置 Jenkins 与 gitlab 的互信,然后配置自动构建。
  • 3,模拟程序员开发代码,然后提交之后 Jenkins 自动构建。

需要准备的:

  • 1,已经安装配置好了的 gitlab。
  • 2,上篇文章中的配置好了的 Jenkins。
  • 3,git 的 GUI 工具。

现在进入正题。因为试验已经根据飞翔文档做过一遍了,所以现在整理的话,就不再看文档了,根据自己的记忆,来完成整个的配置。

# 2,先在 gitlab 上操作。

# 1,在 gitlab 创建测试项目。

关于 gitlab 的安装这里就不展示了,不熟悉的小伙伴可以出门左转参考我发布过的 gitlab 的文章。(点击转到 gitlab 部署安装 (opens new window))现在我们直接来到 Windows 的 git 客户端。

Administrator@liqilong MINGW64 ~/Desktop/gittest
$ git clone git@192.168.106.70:linux/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.

Administrator@liqilong MINGW64 ~/Desktop/gittest
$ cd test

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ echo "this is master branch." > readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ cat readme
this is master branch.

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ git add readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ git commit -m 'add readme'
[master (root-commit) bf79505] add readme
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 204 bytes | 204.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.106.70:linux/test.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

然后去 gitlab 中就能看到刚才创建的项目已经有内容了。

image

接着再来创建一个分支作为开发分支。再来一波操作。

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ git branch dev

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (master)
$ git checkout dev
Switched to branch 'dev'

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ ls
readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ echo "this is dev branch" > readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ cat readme
this is dev branch

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ git commit -a -m 'add dev'
warning: LF will be replaced by CRLF in readme.
The file will have its original line endings in your working directory.
[dev 8419ae8] add dev
 1 file changed, 1 insertion(+), 1 deletion(-)

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ git push origin dev
Counting objects: 3, done.
Writing objects: 100% (3/3), 248 bytes | 248.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote:   http://192.168.106.70/linux/test/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To 192.168.106.70:linux/test.git
 * [new branch]      dev -> dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

然后去 gitlab 就能看到 dev 分支以及对应内容了。

image

# 3,将 Jenkins 的公钥放入 gitlab 中,测试是否可以进行拉取代码。

假定我们的项目目录是宿主机的/usr/local/test 目录。

[root@localhost test]$cd /usr/local/
[root@localhost test]$git clone -b dev git@192.168.106.70:linux/test.git
Cloning into 'test'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 9 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (9/9), done.
[root@localhost test]$ls
test
[root@localhost test]$cd test/
[root@localhost test]$ls
readme
[root@localhost test]$cat readme
this is dev branch

说明: -b 是根据分支进行拉取。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

警告

注意:如果拉取失败,有可能是秘钥配置问题,可以将 Jenkins 本机秘钥删除,然后再次生成添加,就可以了。

# 4,ok,现在我们去创建一个项目进行测试。

来到 Jenkins 的配置界面。

# 1,先添加这样一个 ssh server。

笔记

注意这里添加的远程工作目录要与我们刚才测试拉取的目录保持一致,以使其工作的时候,可以直接通过 Git 进行连接,配置,这一点至关重要,不然稍候配置完成之后,就会出现构建异常的问题。我刚才就掉进这个坑里了,现在找到了是这个原因,然后回头一想,不禁拍腿叹息,哎呀,,这里其实就是模仿的正常的,就像我们开发工作一样的,在某个目录,拉取代码,进行开发,推拉弹唱,都是在这个目录下进行,然后 Jenkins 就是一个自动化的外壳,,完全套进去,然后进行工作。

进入系统管理—》系统设置。

image

如果测试中报错: jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to change to remote directory [/usr/local/test]]

看信息得知是没有这个目录,去服务器创建一下就好了。

然后新建项目,创建一个自由风格的名为 test 的项目,分支填写成 dev,从而在构建的时候直接默认为 dev 分支。

image

接着配置构建触发器。

image

在构建中添加 ssh server 的动作,具体操作如下图:

image

暂时这样一个简答的项目就创建完成了。

简单总结配置:

  • 1,添加一个自由风格的名为 test 的项目。
  • 2,配置 gitlab 的项目链接。
  • 3,配置 gitlab 的 webhook 通过 Jenkins 的 api 进行构建。
  • 4,添加构建命令以验证试验效果。

# 5,将刚才的 Jenkins api 添加到 gitlab 中。

image

说明:

  • 1,首先是进入到刚刚创建的 test 项目当中。
  • 2,进入设置的此选项当中。
  • 3,将刚才 Jenkins 中的 url 填写进来。
  • 4,点击添加,就生成了。

image

那么现在就在 gitlab 这里先测试下效果,看看点击这里之后,Jenkins 是否会自动构建。注意,我们现在的项目可是刚创建好,现在先去跑一下看看效果如何。

image

这里是我们的第一次构建,如果你跟着做的,但是构建失败或者异常,那么有以下思路可供参考:

  • 1,那就是我上边再三强调的,是否一开始测试拉取分支所在的服务器目录,与刚才在项目配置处定义的目录是否一致,如果测试拉取代码是在:/usr/local/ 拉去到 test 目录中,那么再项目中就应该定义为/usr/local/test,此意为指定项目工作目录。
  • 2,看看是否有一些免密码的地方配置有问题。

# 6,试验。

那么接下来,我们一层一层剥离,先看在 gitlab 中手动一下看看是否能联动 Jenkins 的构建。

方法很简单,在前边配置好的webhook当中点击Push Events.

image

点击之后,我们去看下 Jenkins 那边是什么效果。

哎呦我去,报错了!!

image

看到 403 的错误应该是刚刚添加的 URL 访问出问题啦。而,前人存在的意义正在于,把这些小坑填平助我们直驱成功。

警告

注意:如果你此刻做测试所使用的 Jenkins 是公司生成在用的,而且这个 Jenkins 也启用了相关的针对不同用户分配不同视图的功能了的话,那么,请谨慎执行下边的操作,因为下边的操作可能会导致你之前做过的权限分配,化为虚有,当然,如果你用的 Jenkins 是自己个人测试的,或者压根就没有启用用户权限分配相关的功能,那么可以大胆的往下走。

现在去到 Jenkins 方。点击系统设置—》全局安全配置—》取消“防止跨站点请求伪造”—》配置授权“授权策略”中的“安全矩阵”。

image

接着:

image

配置完之后保存,然后再重复刚才在 gitlab 当中的动作。

看到了返回值至少已经是 200 了。如下图:

image

接着去 Jenkins 中看看。

image

再看下构建信息:

image

完美。如果已经到了这步,那么接下来你就可以安心于开发了,从你开发中,无论开发了什么代码,只要一进行提交,那么就会触发 Jenkins 的构建,新代码也就自动跑到远程目标服务器啦。

接下来先模拟一下开发与提交:

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ ls
readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ echo "Test push code builds automatically" >> readme

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ cat readme
this is dev branch
Test push code builds automatically

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ git commit -a -m "Test push code builds automatically"
warning: LF will be replaced by CRLF in readme.
The file will have its original line endings in your working directory.
[dev 0cd5af4] Test push code builds automatically
 1 file changed, 1 insertion(+)

Administrator@liqilong MINGW64 ~/Desktop/gittest/test (dev)
$ git push origin dev
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote:   http://192.168.106.70/linux/test/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To 192.168.106.70:linux/test.git
   8419ae8..0cd5af4  dev -> dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

now,去看下 Jenkins 是否执行了构建并把新代码推到了远程服务器。

image

然后看代码是否是新的。

image

此处模拟的算是一个类似 php 或者静态网站开发的一系列自动化,那么,套用这个思路,基本上对于 java 项目,nodejs 项目,以及其他项目,都是可以通过这种方式来进行配置构建的。

以上的试验流程,是依据原文进行了一次疏通与整理,并没有再往深入的探索以及应用,因为在我们公司里边,并没有任何一个项目,是使用了自动构建的这种方式的,当然了,每家有每家的情况,要能够结合实际工作情况,来进行分析判断。

# 7,补充内容,分支的探索。

昨天收到一个同学的求助,说自己公司的情况正是如此,测试预发线上三个环境全部都在一个 Jenkins 中,然后测试以及预发的项目都做成了自动构建的,现在的问题是,在测试提交代码,会发现,测试以及预发的这个项目都构建起来了。那么问题来了,如何实现,提交对应的环境的代码,就只有对应环境的项目部署?

首先,听完这段话,我想说,首先三个环境放在一起,不合理,测试可以自动构建,预发,不应该自动构建了,最后他的回答是,这些功能是之前的运维人员配置的,现在也没有太多话语权,无法决定大建筑上的东东。

唯有提升自己的技术,才是最真的王道!

那么好,现在就来说说这个自动构建过程中如何让项目区分开来。当然,可能像这样测试预发放在一起,又同时开启了自动构建的情况,并不常见,但是,经过对接下来这个知识点的了解学习,可以让我们掌握,如何在配置自动构建的时候,灵活的控制分支问题。

其实,玄机就在 Jenkins 项目配置当中 webhook 处的高级里边的内容,下图是展开的高级的样子:

image

这个地方 Jenkins 默认的选择的是接受所有分支提交的触发,也就是,无论你提交了什么分支,那么都会触发此项目的构建。

现在,假如我们开发的分支都是 dev 分支,那么可以如下图设置:

image

这样配置之后,即代表此项目只在当 dev 分支提交会触发构建,其他分支提交则不会触发构建。

当然这个地方可以使用通配符进行扩展性定义:

  • *.dev : 表示以 dev 结尾的分支提交都会触发构建。
  • dev.* : 表示以 dev 开头的分支提交都会触发构建。
  • *.dev.* : 表示包含 dev 的分支提交都会触发构建。

嗯,这个知识点就分享到这里,如果有一些其他的个性化需求,请根据这些现有的功能,发挥自己的脑洞,灵活运用。

微信 支付宝
#jenkins#gitlab
上次更新: 2024/07/04, 22:40:37
使用docker部署Jenkins及初始配置
Jenkins回滚方案探微

← 使用docker部署Jenkins及初始配置 Jenkins回滚方案探微→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式