环境准备:

  1. gitlab账号公网账号:代码仓库和编译器
  2. 目标机:装有dockergitlab-runner环境的服务器(Linux或类unix机器,我使用的时centos
  3. 项目代码:testgolang为例(gitlab官网仓库)
  4. Dockerfile:对程序编译后打镜像
  5. .gitlab-ci.yml :CI/CD的gitlab机器运行逻辑的操作文档

一  环境配置

1.1 配置gitlab

点击Expand进入

1.2 服务器配置

安装docker参考:https://www.cnblogs.com/zyxnhr/p/11825331.html

安装gitlab-runner:参考https://docs.gitlab.com/runner/install/linux-manually.html

安装完成后,像gitlab进行注册

注册之后,查看相关注册的信息

[root@iZj6c56sisrhp6wdto3autZ ~]# cat /etc/gitlab-runner/config.toml

concurrent = 1
check_interval = 0 [session_server]
session_timeout = 1800 [[runners]]
name = "mbp13-local-runner"
url = "https://gitlab.com/"
token = "KM2x1z2gmF_Np78Eos7r"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]

1.3 验证环境

[root@iZj6c56sisrhp6wdto3autZ ~]# gitlab-runner verify

Runtime platform                                    arch=amd64 os=linux pid=21733 revision=ce065b93 version=12.10.1
Running in system-mode. Verifying runner... is alive runner=KM2x1z2g

[root@iZj6c56sisrhp6wdto3autZ ~]# gitlab-runner list

Runtime platform                                    arch=amd64 os=linux pid=21741 revision=ce065b93 version=12.10.1
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
mbp13-local-runner Executor=shell Token=KM2x1z2gmF_Np78Eos7r URL=https://gitlab.com/

返回gitlab页面,就可以看到注册的信息

已经注册成功,查看准备的项目

1.4 环境说明

这里的项目时是直接从原作者的github项目中导入,实验使用https://github.com/yangshun2005/gitlab-cicd

直接导入,在这里出现一个问题,本来老师的github中,真正的实验项目只有testlong,所以这样的话,不管你怎么修改testgolang的内容,也无法触发CDCD功能,这一块卡了很久,只需要把下面的两个文件拷贝出来,根据自己的实际进行部分修改调整,就可以使用

调整后的.gitlab-ci.yml文件

stages:
- deploy docker-deploy:
stage: deploy
# 执行Job内容
script:
# 通过Dockerfile生成cicd-demo镜像
- docker build -t testgolang .
# 删除已经在运行的容器
- if [ $(docker ps -aq --filter name= testgolang) ]; then docker rm -f testgolang;fi
# 通过镜像启动容器,并把本机8001端口映射到容器8001端口
- docker run -d -p 8001:8001 --name testgolang testgolang
tags:
# 执行Job的服务器
- mbp13
only:
# 只有在master分支才会执行
- master

Dockerfile文件

# 镜像文件
FROM golang:latest
# 维修者,这个作者的联系方式
MAINTAINER William "2095686947@qq.com" # 镜像中项目路径
WORKDIR $GOPATH/src/chinaase.com/testgolang
# 拷贝当前目录代码到镜像,这里需要注意,因为go的项目位置出现变化,需要调整,对比老师的源码
COPY ./testgolang $GOPATH/src/chinaase.com/testgolang
# 制作镜像
RUN go build . # 暴露端口
EXPOSE 8001 # 程序入口
ENTRYPOINT ["./testgolang"]

go项目

package main

import "net/http"

func main() {
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello chinaase willim ,I running in docker-container and buit by gitlab_cicd_test6"))
})
http.ListenAndServe(":8001", nil)
}

二 CICD操作以及问题

然后就可以修改master分支的代码进行提交,就可以触发CICD功能,一般的操作,使用git操作git相关命令

git clone  git地址 #如果右分支,可以使用-b  分支名
修改文件
git commit -m “描述”
git push origin 分支 #如果是master,直接git push 即可

这里为了方便,就再gitlab上进行修改提交,我这里每次修改的是go项目中的输出部分,test1-test6修改,触发CICD

2.1 git版本问题

出现问题

出现这个问题,原因是git的版本太低,升级git的版本

[root@iZj6c56sisrhp6wdto3autZ ~]# yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

[root@iZj6c56sisrhp6wdto3autZ ~]# yum install git

[root@iZj6c56sisrhp6wdto3autZ ~]# git version

git version 2.22.0

再次修改触发

2.2 golang项目的位置

这个原因是Dockerfile中,去找testgolang中go的项目,但是没有找到,修改Dockerfile中的位置即可,对比园项目中的Dockerfile文件,和这里调整的文件按进行对比

2.3 成功触发

修改触发后,pass

查看job的信息

Running with gitlab-runner 12.10.1 (ce065b93)
on mbp13-local-runner KM2x1z2g
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on iZj6c56sisrhp6wdto3autZ...
Getting source from Git repository
00:09
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/KM2x1z2g/0/ningherui/gitlab-cicd/.git/
From https://gitlab.com/ningherui/gitlab-cicd
* [new ref] refs/pipelines/139580859 -> refs/pipelines/139580859
f43e867..052cbcd master -> origin/master
Checking out 052cbcde as master...
Skipping Git submodules setup
Restoring cache
00:00
Downloading artifacts
00:00
Running before_script and script
00:02
$ docker build -t testgolang .
Step 1/7 : FROM golang:latest
---> 07799c7aa10b
Step 2/7 : MAINTAINER William "2095686947@qq.com"
---> Using cache
---> fd734b5d17bb
Step 3/7 : WORKDIR $GOPATH/src/chinaase.com/testgolang
---> Using cache
---> ce8abbaf1a11
Step 4/7 : COPY ./testgolang $GOPATH/src/chinaase.com/testgolang
---> 24a949942b85
Step 5/7 : RUN go build .
---> Running in d6565c39d4fa
Removing intermediate container d6565c39d4fa
---> 76ac407d4c22
Step 6/7 : EXPOSE 8001
---> Running in ac630ef14ce4
Removing intermediate container ac630ef14ce4
---> a9016c405f94
Step 7/7 : ENTRYPOINT ["./testgolang"]
---> Running in 4c7c3b355466
Removing intermediate container 4c7c3b355466
---> e30f956c0da8
Successfully built e30f956c0da8
Successfully tagged testgolang:latest
$ if [ $(docker ps -aq --filter name= testgolang) ]; then docker rm -f testgolang;fi
"docker ps" accepts no arguments.
See 'docker ps --help'.
Usage: docker ps [OPTIONS]
List containers
$ docker run -d -p 8001:8001 --name testgolang testgolang
b9943d3f61c1a084e1fb49fec48048da28ca0216679e5ec20b1bf3680369a040
Running after_script
00:00
Saving cache
00:00
Uploading artifacts for successful job
00:00
Job succeeded

三 结果验证

3.1 服务器验证

查看容器

[root@iZj6c56sisrhp6wdto3autZ ~]# docker ps -a

[root@iZj6c56sisrhp6wdto3autZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9943d3f61c1 testgolang "./testgolang" 20 minutes ago Up 20 minutes 0.0.0.0:8001->8001/tcp testgolang

查看镜像

[root@iZj6c56sisrhp6wdto3autZ ~]# docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testgolang latest e30f956c0da8 21 minutes ago 824MB

3.2 访问验证

访问http://47.57.21.136:8001/hello测试

基本实现CI/CD的功能


参考:https://github.com/yangshun2005/gitlab-cicd,视频连接https://ke.qq.com/course/1346488?platform=1&pay_succ=1#term_id=101443874&pf=midas_group_pay-1000-pc-1000&outTradeNo=GP6659314861203312640&tokenId=E-200424120101412572

gitlab的CI/CD实现的更多相关文章

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

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

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

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

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

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

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

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

  5. Gitlab的CI/CD初尝试

    初衷:今天公司的前端和测试人员吵起来了.原因是测试埋怨前端人员把Bug的状态更改为已解决,结果代码根本没提交,而前端人员埋怨测试测的太频繁了,需要打几个环境的包不方便.又要改东西又要频繁打包费时间.凡 ...

  6. 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法

    至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...

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

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

  8. jenkins、gitlab配置CI/CD

    1. 在gitlab中创建好项目(gitlab的安装和基本使用这里不在说明) 2. 创建jenkins任务 jenkins 需要几个插件请先安装好 - Git plugin - GitLab Plug ...

  9. GItlab作CI/CD时,想快点,有啥招?

    如果希望.m2文件有存缓,或是不要每次从dockerhub上找镜像(有的是本地镜像,远程没有的) 那么,gitlab-runner的config.toml初步优化文件如下: concurrent = ...

随机推荐

  1. maven中心仓库OSSRH使用简介

    目录 简介 为什么使用中心仓库 发布到中心仓库前的准备工作 使用OSSRH 使用Sonatype创建ticket 中央仓库中的组件要求 提供Javadoc 和源代码 使用GPG/PGP给文件签名 Me ...

  2. 安装mongoDB出现的问题:无法启动

    在我的电脑- 管理 - 服务-中会出现一个MongoDB Server的服务,你需要去手动删除这个服务删除指令: 在cmd管理员模式下使用: sc delete MongoDB Server 然后再配 ...

  3. ES6转ES5(Babel转码器)

    ES6转ES5(Babel转码器) 前提:必须在VScode中已经安装了Node.js 官网:https://nodejs.org/en/ 一.安装命令行转码工具 npm install --glob ...

  4. Math类的random()方法

    Math类的random()方法 Math类的random()方法可以生成大于等于0.0.小于1.0的double型随机数. Math.random()方法语句基础上处理可获得多种类型.或任意范围的随 ...

  5. Django 模板(Template)

    1. 模板简介 2. 模板语言 DTL 3. 模板继承 4. HTML 转义 5. CSRF 1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML.模版系统 ...

  6. SpringMVC请求参数解析

    请求参数解析 客户端请求在handlerMapping中找到对应handler后,将会继续执行DispatchServlet的doPatch()方法. 首先是找到handler对应的适配器. Hand ...

  7. 2.1.3- 体会css样式

    css初始 css样式规则 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. SpringCloud之Ribbon负载均衡策略

    Spring Cloud 微服务架构学习记录与示例 一.认识Ribbon 首先咱们需要认识下负载均衡,一般分为服务器端负载和客户端负载均衡. 服务器端负载均衡:比如Nginx.F5,请求达到服务器后由 ...

  9. hdu4454 三分 求点到圆,然后在到矩形的最短路

    题意:       求点到圆,然后在到矩形的最短路. 思路:       把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离 ...

  10. APP的编译和反编译

    目录 Apktool的准备 Apktool解压APP Apktool打包APP 对APP进行签名