• 1. 在gitlab中创建好项目(gitlab的安装和基本使用这里不在说明)

  • 2. 创建jenkins任务

jenkins 需要几个插件请先安装好

- Git plugin

- GitLab Plugin

- Gitlab Hook Plugin

- Pipeline

- Docker Pipeline

- docker-build-step

- Build Authorization Token Root Plugin

jenkins 机器上安装docker,确保 docker 命令可用

由于jenkins有安全限制,需要在全局配置里修改配置

系统管理 -> 系统设置 -> 去掉 Enable authentication for '/project' end-point

这里创建 流水线风格的任务,pipeline 脚本内容如下:

 
pipeline {
agent any stages {
stage('clone code from gitlab') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/dev']],
doGenerateSubmoduleConfigurations: false,
userRemoteConfigs: [[
credentialsId: 'gitlab-robot',
url: 'ssh://git@192.168.1.11:8222/examples/test-app.git'
]]])

}
}
stage('build docker image') {
steps {
script{
withDockerRegistry(credentialsId: 'docker-hub', url: 'https://index.docker.io/v2/') {
def myappImage = docker.build "ninejy/myapp", "-f Dockerfile ."
myappImage.push()
}
}
}
}
stage('deploy') {
steps {
sh '''
ssh 192.168.1.11 "docker run -d --name myapp-01 -p 8080:8080 ninejy/myapp"
'''
}
}
}

post {
always {
cleanWs()
}
}
}

gitlab-robot 是jenkins中配置的credential,是访问gitlab的ssh用户名和私钥。

docker-hub 也是jenkins中配置的credential,是访问docker官方镜像仓库的用户名密码。

  • 3. 配置 webhook

这一步的目的就是让有代码提交到 gitlab 的时候,通过gitlab webhook 触发 jenkins 任务执行。具体配置有两部分。

(1)jenkins 这边,勾选下图中这个选项。这里不同的 jenkins 版本会有不同,小编使用的 jenkins 是 2.266 版本。不过也都是大同小异,如果这里遇到问题可以留言咨询。

(2)gitlab 这边,浏览器打开 gitlab 点开要配置的项目页面,这一步配置要管理员(至少是项目的Maintainer)。左下角有个 Settings 鼠标放上去会出现几个选项

点击 Webhooks ,会出现下面页面。填写步骤(1)中勾选那一行URL后面的部分,勾选 Push events 选项,分支填写 dev。这里我们只想代码提交到 dev 分支的时候触发自动构建。其他很多选项,比如: Tag push events 是有 tag 推送到 gitlab 的时候触发webhook。等等吧,功能很强大可以自己具体看一下哪种适合自己的场景。

点击下面的 Add webhook 按钮。

哎呀,不好!报错了。

这是因为 gitlab 不允许请求本地网络。这里小编使用内网穿透技术,把jenkins服务端口映射到了阿里云的服务器上。

重新配置步骤(2)。把 URL 中的 IP 和端口 替换为阿里云的 IP 和端口即可。

配置好后下面会出现一条 webhook 记录,如下图。可以点击 test 选择事件类型进行测试,看看有没有触发jenkins任务。这里不再演示。

所有配置都已完成。下面提交下代码到dev分支试试看,有没有我们想要的效果。

不出意外的话,jenkins任务运行完成后就可以访问应用了(具体的地址看具体的配置,我的是下面的地址)。

http://192.168.1.11:8080/

到此整个流程都走通了,后面再有代码提交到dev分支就会自动触发构建,自动部署了。是不是很爽啊。

说明:以上例子中docker镜像仓库使用的是官方的仓库,由于网络问题国内拉取、推送镜像比较慢。如果自己有harbor可以换做harbor的地址,也可以申请阿里免费的镜像仓库。

整个过程涉及的技术蛮多的,如果实践过程中遇到问题,欢迎留言。

最后贴一下项目的代码:

# hello.go

 
package main

import (
"fmt"
"net/http"
"os"
)

func main() {
hostname, _ := os.Hostname()
port := ":8080"

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(fmt.Sprintf("Version --> v3.0\nHostname --> %s\n", hostname)))
})
fmt.Printf("Server start on port %s ...\n", port)
err := http.ListenAndServe(port, nil)
if err != nil {
fmt.Println(err)
}
}

# Dockerfile

 
FROM golang:alpine as builder
RUN mkdir /build
ADD hello.go /build/
WORKDIR /build
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o hello .
FROM scratch
COPY --from=builder /build/hello /app/
WORKDIR /app
CMD ["./hello"]
 

jenkins、gitlab配置CI/CD的更多相关文章

  1. Docker 集成 Jenkins Gitlab 实现 CI/CD

    首先介绍下环境部分,文章中共涉及到三台服务器,分别用 Gitlab,Jenkins,Deploy 三个名称代替,部署在内网环境,同时因为政策原因,服务器无法直接连通外网.下载 Jenkins 插件时需 ...

  2. CentOS安装gitlab,gerrit,jenkins并配置ci流程

    CentOS安装gitlab,gerrit,jenkins并配置ci流程 By Wenbin juandx@163.com 2016/4/9 这是我参考了网上很多的文档,配置了这三个软件在一个机器上, ...

  3. 持续集成指南:GitLab 的 CI/CD 工具配置与使用

    前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...

  4. [转] gitlab 的 CI/CD 配置管理

    [From] http://blog.51cto.com/flyfish225/2156602 gitlab 的 CI/CD 配置管理 (二) 标签(空格分隔):运维系列 一:gitlab CI/CD ...

  5. 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境

    庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...

  6. Jenkins+Gitlab配置Webhook实现提交自动部署

    一.概述 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 已经实现了 Jenkins+harbor+gitlab+ ...

  7. 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题

    在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...

  8. Jenkins 配置CI/CD任务

    本文演示如何通过Jenkins创建CI/CD任务,部署一整套微服务体系结构,并运行在之前搭建的mini云平台上. 如果是初始尝试实践,可能需要参考 快速搭建云原生架构的实践环境 和 Jhipster技 ...

  9. Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成

    前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...

随机推荐

  1. HBase基础理论知识

    来源:第四章:大数据 の HBase 基础   本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 ...

  2. 美区Apple ID账号共享

    前言 前几天我已经分享了日区的账号,今天我来分享一下美区的账号.说到这个美区的账号,满满的记忆呀!这是我第一个公众号时创建的外服账号,里面的软件比较多,原本想整理一下自己购买了哪些软件的,乍一看,已购 ...

  3. selenium中的三种等待方式

    1.强制等待,采用的time.sleep,然后后面加上要等待的时间: 2.隐性等待implicitly_wait,隐性等待设定后,会对之后的所有代码生效,会在设定的时间之内,不停的去查找元素,如果找到 ...

  4. Luogu P1625 求和

    题意 给定两个整数 \(n,m\),求 \[\sum\limits_{i=1}^{n}\frac{1}{\prod\limits_{j=i}^{i+m-1}j} \] \(\texttt{Data R ...

  5. SourceTree安装及卸载

    一.安装步骤 下载地址: 链接:https://pan.baidu.com/s/1K5ImZASuThJZoGLz6Ay_4g 提取码:hqkp 1. 点击安装包,点击下一步 2. 出现账户注册的页面 ...

  6. Learn day8 re正则表达式\search函数\反射\tcp发送消息(循环)\udp发送消息

    1.匹配单个字符 # ### 正则表达式 - 单个字符匹配 import re ''' findall 把匹配的结果直接返回到列表中 lst = re.findall("正则表达式" ...

  7. 记一次微信公众号(微信H5)网页对接腾讯云慧眼人脸核验开发笔记

    需求是这样的,客户需要一个在观看学习视频前弹出人脸识别核验真人的功能,客户找了个APP作为参考,但是在微信上第三方人脸识别是无法直接调取到前置摄像头的,都是通过用户自己获取用户的身份信息或者照片,然后 ...

  8. 【面经】面试官:如何以最高的效率从MySQL中随机查询一条记录?

    写在前面 MySQL数据库在互联网行业使用的比较多,有些小伙伴可能会认为MySQL数据库比较小,存储不了很多的数据.其实,这些小伙伴是真的不了解MySQL.MySQL的小不是说使用MySQL存储的数据 ...

  9. numpy数组运算

    一.四则运算   (以此为例) 1.加法 2.减法 3.乘法 4.除法 5.幂运算 二.比较运算   (以此为例) 1.<   > 2.>=    <= 3.==    != ...

  10. streamreader

    using (StreamReader sr = new StreamReader(@"C:\Documents and Settings\Administrator\桌面\1.txt&qu ...