环境准备:

  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. 体渲染——Volume

    基本概念   体渲染(Volume),是绘制类似烟.雾.云的效果.这种渲染和之前的表面渲染不同,光线可以在物体内部进行散射. 体渲染的主要特点    1. 可以在物体内部散射.    2. 从进入vo ...

  2. [Skill]从零掌握80%的业务查询SQL语句

    前言 本篇文章的主要目的是帮助初学者快速入门SQL查询,从而解决实际业务中80%的SQL查询问题. 本文主要框架如下: 上篇:介绍SQL的语法顺序和执行顺序 中篇:介绍条件子句.分组查询和排序的细节 ...

  3. SpringBoot 使用逆向工程 构建Mapper.xml Dao层(持久层) 实体类

    逆向工程 注: 有数据库表即可 第一步为创建数据库表 (可选)使用PowerDesigner设计数据库表,物理模型构建 添加pom.xml 逆向工程生成代码插件 <!--plugin 逆向工程生 ...

  4. Linux递归压缩图片脚本

    1 压缩图片 使用ImageMagick的convert命令进行压缩图片,一般只需要一个指定压缩质量的参数,比如: convert -quality 75 1.jpg 1_compress.jpg 可 ...

  5. [kuangbin]专题六 最小生成树 题解+总结

    kuangbin专题链接:https://vjudge.net/article/752 kuangbin专题十二 基础DP1 题解+总结:https://www.cnblogs.com/RioTian ...

  6. 浅入Kubernetes(8):外网访问集群

    目录 查询 Service Service 外部服务类型 配置 ServiceType 伸缩数量 阶段总结 在前面几篇文章中,我们学习了 kubeadm .kubectl 的一些命令,也学会了 Dep ...

  7. D - 下个也是签到题 FZU - 2221(博弈)

    ZB loves watching RunningMan! There's a game in RunningMan called 100 vs 100. There are two teams, e ...

  8. 微信小程序中的自定义组件

    微信小程序中的组件 前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 ...

  9. 【转】gitlab CI流水线配置文件.gitlab-ci.yml详解

    目录 GitLab CI流水线配置文件.gitlab-ci.yml详解 实验环境 GitLab CI介绍 .gitlab-ci.yml 配置参数 参数详解 script image services ...

  10. Android最新敲诈者病毒分析及解锁

    一.情况简介 从去年开始PC端的敲诈者类病毒在不断的爆发,今年年初的时候手机上也开始出现了敲诈者之类的病毒,对这类病毒很无语也是趋势,因为很多时候病毒的产生是和金钱利益相关的.前天去吾爱破解论坛病毒样 ...