1.相关概念

互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署

持续集成(CI)上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。它的好处主要有两个:

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续交付

持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。

持续部署(CD)

持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤

1.客户端发起代码push到gitlab上

2.gitlab配置了webhook的东西,它可以出发jenkins的构建

jenkins做的事情就比较多

3.1 构建代码

3.2 静态分析

3.3 单元测试

3.4 build镜像

3.5 推送push镜像仓库

3.6 调用k8s的apik8s拉取镜像仓库的进行部署。

2. Jenkins介绍及相关软件的安装

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

开源的java语言开发持续集成工具,支持CI,CD;

易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;

消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;

分布式构建:支持Jenkins能够让多台计算机一起构建/测试;

文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;

丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

2.1Jenkins的安装

一定要看官网官网

Jenkis依赖Java,但是需要注意的是java9是不可以使用的,所以我们需要安装Java8,在安装Java8的时候,又出现一个坑,Oracle需要登录才可以下载sdk,如果不想登录的话,可以使用sudo apt-get install oracle-java8-installer来安装。

下面开始安装Jenkins。

  1. 添加key
  2. wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
  3. 修改/etc/apt/sources.list:
  4. 添加下面的源:

deb https://pkg.jenkins.io/debian-stable binary/

3 apt的方式安装

`sudo apt-get update

sudo apt-get install jenkins`

如果我们需要修改端口的话,以Ubuntu 18.04为例:vim /etc/default/jenkins,在这个地方把8080改成相应的端口即可。然后注意把Jenkins重新启动,/etc/init.d/jenkins restart。然后我们需要获取密钥,在Jenkins初始化的时候会需要,cat /var/lib/jenkins/secrets/initialAdminPassword,我们把密钥复制。在浏览器输入http://ip:port即可。接下来是傻瓜式操作。在我配置完成之后,遇到了一个坑爹的问题,浏览器变成了白屏,最后的解决方案是重新启动Jenkins服务,重启解决一切问题啊。

  1. jar包的方式安装
  2. 或者可以直接下在jar包,
  3. 我们有多种方法启动,我们选择使用jar包的方法,

java -jar jenkins.war --httpPort=31000

然后操作方法同上。

  1. docker jenkins安装

我使用的这一中。

docker官网

使用dockers拉去镜像,docker pull jenkins ,经过等待后,我们使用docker images查看下载的镜像。

也可以使用docker来启动:

docker run -p 8080:8080 -p 50000:50000 -d -v /your/home:/var/jenkins_home jenkins

我们来看看各个参数的含义:

-d: 后台运行容器,并返回容器ID;

-p 8080:8080 将镜像的8080端口映射到服务器的8080端口; 50000:50000 将镜像的50000端口映射到服务器的50000端口;

-v jenkins:/your/home:/var/jenkins_home,jenkins工作目录和宿主机目录进行映射,必须保证当前用户具有your/home访问权限。

除此之外,我们还可能遇到这样的权限问题,

原因是Jenkins镜像内部使用的用户是jenkons,但是我启动容器时的账号是root,导致没有权限操作内部目录,我们可以稍微改一下上面的命令:

docker run -p 8080:8080 -p 50000:50000 -d -v /your/home:/var/jenkins_home -u 0 jenkins

这样就可以成功启动了,该命令的作用是覆盖掉用户jenkons微root。

也可以使用

docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins 。

这个和前面不太一样,生成的密钥在docker容器中,使用docker ps -a,查看当前运行的容器,在使用docker exec -it 76b66ca806f7 /bin/bash ,记得替换为自己的容器id。

在容器中执行cat /var/jenkins_home/secrets/initialAdminPassword,获得相应密钥即可进行初始化,同上。

其实Jenkins的插件的安装还是有很多的坑的,主要的原因还是在于网络的原因,我们可以把把源替换为清华的源。

在系统管理---》插件管理-》高级 里面进行设置。

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

此外,我还遇到一个坑爹的问题,服务器的访问特别的缓慢,配置文件根本打不开,我一度怀疑是网络的问题,切换微我的手机流量,问题依然无法解决,我甚至把改容器给删除,镜像重新下载,还是无法解决问题,直到最后我发现容器的状态是unhealthy,我使用docker logs contained --tail 100, 查看了docker的日志。这样就很明确了,硬盘空间不够啦。

下面,我使用df -xh命令查看当前硬盘的使用率,很明显,就是这个问题。

我的解决思路是把docker的镜像和容器给迁移到其他富余的空间,如下:

1.停止docker服务。systemctl stop docker

2.创建一个目录用于保存docker的镜像和容器,mkdir -p /opt/docker/lib

3.迁移/var/lib/docker到上面的目录中,rsync -avz /var/lib/docker /opt/docker/lib

4.配置docker的配置文件,Ubuntu下的docker配置文件在,/lib/systemd/system/docker.service,修改

ExecStart=/usr/bin/dockerd --graph=/opt/docker/lib/docker

5.重写加载docker

systemctl daemon-reload systemctl restart docker systemctl enable docker
  1. 查看是否成功
  2. docker info

deal。。。。

docker images查看镜像,docker ps -a 查看容器。

  1. 收尾
  2. 如果没有任何问题,就可以把/var/lib/docker删除即可。

2.2 docker gitlab的安装

写在前面:在安装之前,我们需要弄明白一件事情,搞明白gitlab和GitHub的区别,多余的废话不说,主要体现在github相当于我们需要把代码部署到别人的服务器上,而我们可以使用gitlab在我们自己的服务器上搭建一个git环境,代码也可以放在我们自己的服务器上,这样我们即享受了git的方便,也保护了代码的安全。

先参考官网:gitlab docker官网

使用 docker pull gitlab/gitlab-ce 来安装。

接下来使用

sudo docker run --detach  --hostname gitlab.example.com  --publish 443:443 --publish 80:80 --publish 22:22  --name gitlab  --restart always  --volume /srv/gitlab/config:/etc/gitlab  --volume /srv/gitlab/logs:/var/log/gitlab  --volume /srv/gitlab/data:/var/opt/gitlab  gitlab/gitlab-ce:latest

不幸的是,服务器报了下面的错误,大意是说,服务器端口22被占用了。

使用lsof -i:22查看:

知道了问题,解决起来也不难,我们把端口映射修改一下即可,即

sudo docker run --detach  --hostname gitlab.example.com  --publish 443:443 --publish 80:80 --publish 2222:22  --name gitlab  --restart always  --volume /srv/gitlab/config:/etc/gitlab  --volume /srv/gitlab/logs:/var/log/gitlab  --volume /srv/gitlab/data:/var/opt/gitlab  gitlab/gitlab-ce:latest

下面这个表是gitlab的映射关系

我们可以修改gitlab的配置

docker exec -it gitlab /bin/bash

然后修改/etc/gitlab/gitlab.rb即可,

sudo docker run --detach  --hostname gitlab.example.com  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;"  --publish 443:443 --publish 80:80 --publish 2222:22  --name gitlab  --restart always  --volume /srv/gitlab/config:/etc/gitlab  --volume /srv/gitlab/logs:/var/log/gitlab  --volume /srv/gitlab/data:/var/opt/gitlab  gitlab/gitlab-ce:latest

最后

sudo docker restart gitlab

接下来我们可以在浏览器打开gitlab,输入http://ip:port,这里port因为是80,所以可以省略。然后是让设置新的密码。再然后就要登录,登录的时候千万要注意,这个地方不是输入你在gitlab官方上的用户名和密码,用户名应该是root,密码是刚才设置的。

小贴士:如果你不幸的忘记了密码,自然是有办法补救的。

重置密码 ,我们需要进入到gitlab容器中,注意必须是root账户,然后

gitlab-rails console production ,注意这个过程需要花费时间,耐心等待即可,

完成之后,我们可以使用两种方式来找到用户名或者邮箱,user = User.where(id: 1).first 或者是

user = User.find_by(email: 'admin@local.host') 。最后我们修改密码即可,

user.password = 'secret_pass'

user.password_confirmation = 'secret_pass'

不要忘记保存哦。

user.save!

退出控制台,重新登录即可。

好的,我们回到前面,登录到http://ip:port之后,我们创建组,创建用户,把用户添加到组里面,创建项目,这些比较简单,不在贴出来了。

在项目创建好之后,我遇到了这么一个问题,说是我没有配置ssh,所以不能通过ssh的方式来获取代码,这个很简单,配置下ssh就可以了。

此外,我们还可以配置我们服务器的IP地址。操作如下,打开vim /etc/gitlab/gitlab.rb文件,将external_url = 'http://git.example.com'修改成自己的HostName。

接下来我们可以配置邮件服务器,需要安装邮件服务,apt-get install postfix,apt-get install mailutils,安装完成后可以进行测试

echo "Test mail from postfix" | mail -s "Test Postfix" @qq.com

到这里,我们就完成了公司级别的gitlab服务器的搭建。

3. jenkins实战

3.1 流水线

Jenkinsfile 。

声明式流水线:

Jenkinsfile (Declarative Pipeline)pipeline { agent any //在任何可用的代理上,执行流水线或它的任何阶段。 stages { stage('Build') {  steps { //  } } stage('Test') {  steps { //  } } stage('Deploy') {  steps { //  } } }}

脚本化流水线:

enkinsfile (Scripted Pipeline)node {  stage('Build') {  //  } stage('Test') {  //  } stage('Deploy') {  //  }}

win10 修改gitlab账号_玩转gitlab + jenkins相关推荐

  1. gitlab贡献率_如何为GitLab做贡献

    gitlab贡献率 我认为许多人都熟悉GitLab(公司或软件). 许多人可能没有意识到,GitLab还是一个开源社区,它始于我们的共同创始人Dmitriy Zaporozhet在2011年的第一次提 ...

  2. win10创建新账户_玩转Win10时间线技巧汇总

    微软从Win10 1803开始引入了Timeline时间线功能,我们可以方便地找回浏览网页或打开文件的历史记录,并且在使用微软账户登录后,能够在不同的设备之间同步历史记录.MS酋长撰写本文来汇总一下W ...

  3. python京东注册账号_玩转京东支付(python)

    说明 做了微信.支付宝和京东支付之后,发现,最扯蛋的支付,肯定是京东支付,要完整开发京东支付,必须要看完京东支付开发者文档的官网每一个角落,绝对不能凭你的任何经验去猜测有些流程,比如公私钥加解密(不看 ...

  4. GitLab账号初始密码忘记了, 如何重置?

    如果GitLab对接了类似于LDAP这种统一用户管理系统,可以直接在LDAP中修改. 前两天在通过Terraform 部署的GitLab实例中, 初始的账号密码文件/etc/gitlab/initia ...

  5. git 本地如何配置多平台账号|本地 git 账号关联远程 github/gitlab/gitee

    一.问题产生背景 工作用的公司 gitlab 账号,自己平常学习用的 github 账号,又只有一个电脑,公司账号当然不能用于github,所以需要分别配置两套密钥,分别用于自己搞事情研究和公司搬砖使 ...

  6. win10改计算机用户名,win10系统修改本地账号用户名的操作方法

    很多小伙伴都遇到过对win10系统修改本地账号用户名进行设置的困惑吧,一些朋友看过网上对win10系统修改本地账号用户名设置的零散处理方法,并没有完完全全明白win10系统修改本地账号用户名的操作方法 ...

  7. gitlab使用_使用 Docker 部署 Gitlab

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,具有wiki和issue跟踪功能. GitLab是当前应用非常广泛的源代码管理系统. 1. ...

  8. git管理账户忘记了_强制找回GitLab管理员账户密码的方法

    01. 概述 如果gitlab的密码忘记了,由于没有邮箱服务支持,所以可以通过后台直接操作git-shell,先找回管理员的密码.操作步骤如下 02. 环境 使用docker部署的gitlab,因此需 ...

  9. gitlab 端口_安装Gitlab-注意端口

    文档本身并没有什么特殊,安装也很简单,只是修改端口这里如果有需要的可以看一下 安装Gitlab [root@deploy ~]# sudo yum -y install gitlab-ce 默认端口是 ...

最新文章

  1. forget word a out 1
  2. 硬核!一套基于SpringBoot + Vue 的开源物联网智能家居系统!
  3. Unet项目解析(7): 模型编译-优化函数、损失函数、指标列表
  4. python矩阵教程_numpy教程:矩阵matrix及其运算
  5. 计算机维修与维护入门,计算机组装与维护基础知识
  6. 企业域名备案流程_2021境外投资备案申报流程(办理企业境外投资证书注意事项)...
  7. 手机长时间不用自动断网_WiFi动不动就自动断网?都怪手机的默认设置!点这里一键修改...
  8. 如何把一个数据库的数据copy到另外一个数据库
  9. 快速开发框架介绍-懂你的RUOYI
  10. RS485通讯上下拉电阻的选择
  11. PC机组成——主板、芯片组与BIOS
  12. Cookie的SameSite属性
  13. Variation information(信息差异指标)
  14. 哪里买. com最便宜?
  15. 如何使用 Java 将 PDF 转换为文本 (TXT)
  16. 第三届太原理工大学程序设计竞赛新生赛(未完结)
  17. vue.js毕业设计,基于vue.js前后端分离教室预约系统(H5移动项目) 开题报告
  18. 百度官方:网站优化中死链处理指南与总结
  19. 随感——冬天走了、微软社区精英会议
  20. 虚拟私有云(Virtual Private Cloud,VPC)

热门文章

  1. 因未发项目奖金,一名程序员决定删代码泄愤
  2. 每日一皮:和女朋友争吵与阅读软件许可协议之间的共同点...
  3. 自己动手,丰衣足食:从零开始写个 IDEA 插件,要啥功能就做啥!
  4. java类功能说明注释添加,IDEA添加Java类注释模版的方法
  5. JAVA静态方法是否可以被继承 6,JAVA静态方法是否可以被继承?
  6. Tensor for ‘out‘ is on CPU, Tensor for argument #1 ‘self‘ is on CPU
  7. python操作gif
  8. dlib win32
  9. OSError: [WinError 126] 找不到指定的模块
  10. opencv通道拆分与合并:split和merge