使用Gitlab Runner实现

再要部署的服务器上安装 gitlab runner

下载可执行文件

# 按照架构自行选择 本文选择的是  Linux x86-64
# Linux x86-64
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 # Linux x86
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386 # Linux arm
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm

设置可执行权限权限

chmod +x /usr/local/bin/gitlab-runner

创建用户

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

运行服务

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start

注册 Runner

gitlab上找到需要用的URL与token

  • 路径是:Project-> Settings -> CI/CD -> Runners -> Expand

在浏览器中下载gitlab的ssl证书

  1. 点击浏览器链接的左边锁头可以下载证书。本文下载的格式是cer

  2. 将下载好的证书上传到要部署的服务器上。

注册runner

gitlab-runner register --tls-ca-file=/home/gitlab-runner/test.cer
# 根据提示 依次输入如下内容
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://example.com/
Please enter the gitlab-ci token for this runner:
2312132dfa2fdafeafdafewaf
Please enter the gitlab-ci description for this runner:
[centos.localdomain]: test
Please enter the gitlab-ci tags for this runner (comma separated):
test
Registering runner... succeeded runner=nZsc7EsF
Please enter the executor: docker-ssh+machine, parallels, shell, ssh, virtualbox, docker+machine, kubernetes, custom, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
#——————————————————————————注——————————————————————————
本文的executor选择的是shell
# 注册成功后再次run一下gitlab-runner
[root@centos target]# gitlab-runner start
# 注册成功后生成 /etc/gitlab-runner/config.toml
[root@centos target]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0 [session_server]
session_timeout = 1800 [[runners]]
name = "test"
url = "https://example.com/"
token = "adsfasfdsafdsafdafdsfdafa"
tls-ca-file = "/home/gitlab-runner/11111.cer"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]

在项目中配置.gitlab-ci.yml文件

本文的.gitlab-ci.yml

注: 只做了本次部署的配置,具体其他配置可以查看官网https://docs.gitlab.com/ee/ci/yaml/README.html

stages:
- build
before_script:
- export MVN_HOME # export Envionment Variable
- export JAVA_HOME
- java -version
- sh /home/gitlab-runner/kill.sh
# 定义 job
test:
stage: build # stage
tags:
- first # runner tag you configured
only:
- test # branch support regex
script: #command
- mvn clean
- mvn package
- cd ./target
- nohup java -Xms3g -Xmx3g -jar test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &

验证 .gitlab-ci.yml的正确性

可以在gitlab上使用CI Lint验证上面yml文件的正确行。CI LintCI/CD里面。下面是我的验证结果。

Status: syntax is correct
Parameter Value
Build Job - test export MVN_HOME
export JAVA_HOME
java -version
sh /home/gitlab-runner/kill.sh
mvn clean
mvn package
cd ./target
nohup java -Xms3g -Xmx3g -jar test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 & Tag list: first
Only policy: refs, test
Except policy:
Environment:
When: on_success

注意事项

  1. .gitlab-ci.yml文化中指定的 runner tag一定要存在[否则找不到runner会一直pending]
  2. 出现报错fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.x.com/root/cmop.git/': Peer's Certificate issuer is not recognized.
# 关闭ssl校验
[root@gitlab-runner ~]# su - gitlab-runner
[gitlab-runner@gitlab-runner ~]$ git config --global http."sslVerify" false
# 查看
[gitlab-runner@gitlab-runner ~]$ cat /home/gitlab-runner/.gitconfig
[http]
sslVerify = false

使用 Jenkins 实现

下载/使用jenkins

1. 访问 : https://jenkins.io/download/。本文采用的使用是`war`包安装

2. 下载: `wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.190.2/jenkins.war`

3. 运行 :`nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &`
注: `-Dhudson.util.ProcessTree.disable=true`参数很重要,为了不让jenkins杀掉job创建的进程。如果不加的话,即便是`nohup`执行的命令也会在job执行之后杀掉。

访问 ip:8888进行初始化设置

注:如果之前安装过jenkins,会自动升级,并保留之前的数据

使用初始密码登录

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
# 使用下面的密码进入,实际是一个md5的串
1111111111111111111111111

选择plugins

本文直接选择了 suggestions plugins,部分插件安装失败可以直接跳过。

配置密码

重新设置一个密码

# 忘记秘密:
到`/root/.jenkins/users` `admin`用户下找到config.xml,修改下面的内容
<passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
这个密码是`123456`

jenkins中配置Gitlab实现自动部署

安装gitlab插件

1. 依次访问:`Manage Jenkins`->`Manage Plugins`
2. 在:`Available`中搜索`Gitlab`,安装`Gitlab`插件
3. 等待安装。

配置gitlab连接[可不做]

1. 依次访问:`Manage Jenkins`->`Configure System`
2. 找到 Gitlab 标签页
3. 依次填入`Connection name`,`Gitlab host URL`
4. 添加一个`Credntials`,选择`Gitlab API token`
5. 填入在gitlab上设置的`Personal Access Tokens`
6. 点开`Advanced`,勾上`Ignore SSL Certificate Errors`
注:如果不勾上步骤6的话,gitlab是https的将会不成功。
7. 点击`Test Connnection`
8. 保存

创建一个Freestyle project的Jobtest

此时可以先不做任何配置,直接保存。

配置testjob gitlab仓库

1. 在job`test`页面点击`Configure`
2. 找到`Source Code Management`选择`Git`
3. 配置`Repository URL`并添加一个`Credentials`
注:此处想使用`Personal Access Tokens`添加不上,最后使用的账号密码
4. 保存

配置test job Triggers

1. 在job`test`页面点击`Configure`
2. 找到`Build Triggers`选择`Build when a change is pushed to GitLab`其他默认就行
3. 保存

配置webhook

1. 到`Gitlab`项目页面->`Settings`->`Integrations`
2. 输入上一步配置后面的`url`
3. 返回错误`Url is blocked: Requests to the local network are not allowed`
4. 上面的解决办法:
管理员账号登录gitlab,在Admin area中,左侧Settings -> Network -> Outbound requests,勾选Allow requests to the local network from hooks and services
但是没有gitlab管理员权限,我们将采取别的办法

重新配置testjob Triggers改为Poll SCM

1. 配置每分钟刷新一次
*/1 * * * *

配置bulid执行命令

export MVN_HOME # export Envionment Variable
export JAVA_HOME
java -version
sh /home/gitlab-runner/kill.sh
cd /root/.jenkins/workspace/test
mvn clean
mvn package
cd ./target
nohup java -Xms3g -Xmx3g -jar test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &
# 这些也可以写到一个shell脚本中,jenkins调用脚本

对比

  • gitlab-ci
  1. 上手简单
  2. gitlab完美兼容
  3. 没有web页面,但是gitlab有提供
  4. 需要自己配置编译环境
  • jenkins
  1. 上手简单
  2. 需要配置webhook,或者像本文一样轮询
  3. 有自己的web页面
  4. 有丰富的插件,功能强大
  5. 编译环境例如jdk mvn可以在设置中配置,不需要构建

持续集成Gitlab CICD Runner&Jenkins的更多相关文章

  1. 「持续集成实践系列 」Jenkins 2.x 构建CI自动化流水线常见技巧

    在上一篇文章中,我们介绍了Jenkins 2.x实现流水线的两种语法,以及在实际工作中该如何选择脚本式语法或声明式语法.原文可查阅:「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要 ...

  2. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  3. 什么是云效持续集成?如何关联Jenkins进行持续集成?

    什么是云效持续集成?如何关联Jenkins进行持续集成?云效流水线 Flow是一款企业级.自动化的研发交付流水线, 提供灵活易用的持续集成.持续验证. 持续发布功能,帮助企业高质量.高效率的交付业务. ...

  4. Gitlab CI持续集成 - GitLab Runner 安装与注册

    GitLab Runner安装 需要添加gitlab官方库: # For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/ ...

  5. 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点

    1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...

  6. 通过实例介绍持续集成的应用--基于Jenkins

    1.测试工程师为什么要掌握持续集成 一个程序员如果想发布一个产品,他需要编码.编译.测试,发布的过程.对于一个企业来说,如果也想发布一个产品的话,同样的也是需要上述的过程,区别在于企业要发布的产品的需 ...

  7. Web API 持续集成:PostMan+Newman+Jenkins(图文讲解)

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上篇文章我们已经完成了API测试工具选型,接下来是一系列周期性的开发 ...

  8. 持续集成(CI)工具------Hudson/Jenkins(Continuous Integration)安装与配置具体解释

    本文同意转载.但请标明出处:http://blog.csdn.net/wanghantong/article/40985653/, 版权全部 文章概述: 一. 描写叙述了持续集成工具Hudson的安装 ...

  9. linux(centos8):安装Jenkins持续集成工具(java 14 / jenkins 2.257)

    一,什么是Jenkins? 1,jenkins是什么? Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具, 用于监控持续重复的工作,旨在提供一个开放易用的软件平台, 使软件的持续 ...

随机推荐

  1. 智慧金融时代,大数据和AI如何为业务赋能

    前言:宜信技术人物专访是宜信技术学院推出的系列性专题,我们邀请软件研发行业的优秀技术人,分享自己在软件研发领域的实践经验和前瞻性观点. 第一期专访我们邀请到宜信科技中心AI中台负责人王东老师,从大数据 ...

  2. day 21作业

    目录 一.定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放 二.使用abc模块定义一个phone抽象类 并编写一个具体的实现类 一.定义一个类:圆形,该类有半径,周长, ...

  3. JAVA阻塞(IO)和非阻塞(NIO)

    查看这篇文章,了解更多关于Java的阻塞和非阻塞替代创建套接字的信息. 套接字使用TCP / IP传输协议,是两台主机之间的最后一块网络通信. 您通常不必处理它们,因为它们之上构建了协议,如HTTP或 ...

  4. django2.0+连接mysql数据库迁移时候报错

    django2.0+连接mysql数据库迁移时候报错 情况一 错误信息 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 ...

  5. ‎Cocos2d-x 学习笔记(11.8) DelayTime ReverseTime TargetedAction ActionFloat Blink TintTo TintBy ResizeTo ResizeBy

    1. DelayTime 通过create方法create(float d)设置时长,update方法没有任何操作.可以用于动作之间的延迟. 2. ReverseTime create方法create ...

  6. Api版本管理

    关于SpringMVC中如何添加,这一篇说的很详细了. http://www.cnblogs.com/jcli/p/springmvc_restful_version.html 版本管理可以通过路径进 ...

  7. Python开发【第七篇】列表

    问题:当我们要用一系列数字的时候,我们需要将数字进行存储,我们就需要找个容器把数字装起来,我们需要用的时候再拿出来.如何将计算机运算的数据存储在一个地方,同时方便 对数据进行 增.删.改.查 列表 列 ...

  8. opencv::轮廓周围绘制矩形框和圆形框

    基于RDP算法实现,目的是减少多边形轮廓点数 approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool ...

  9. 实现基于netty的web框架,了解一下

    上一篇写了,基于netty实现的rpc的微框架,其中详细介绍netty的原理及组件,这篇就不过多介绍 这篇实现基于netty的web框架,你说netty强不强,文中有不对的地方,欢迎大牛指正 先普及几 ...

  10. Spring Data - Spring Data JPA 提供的各种Repository接口

    Spring Data Jpa 最近博主越来越懒了,深知这样不行.还是决定努力奋斗,如此一来,就有了一下一波复习 演示代码都基于Spring Boot + Spring Data JPA 传送门: 博 ...