docker+gitlab+jenkins从零搭建自动化部署

介绍

本文主要通过docker+gitlab+jenkins来实现自动化集成和部署的全过程,并不会详细的去介绍各种工具的功能。

流程结构

jenkins-gitlab CI流程

准备工作

  1. 1台测试服务器,用于安装docker, 并在docker中配置jenkins,部署代码等。(公司准备的是内网测试机)
  2. 新建一个vue项目,然后推送到gitlab仓储。

开始配置工作

docker

1. 在服务器上安装docker
  1. 更新软件库
yum update -y
  1. 安装docker
yum install docker -y
  1. 启动docker
 service docker start
  1. docker相关命令
 service docker restart  // 重启docker服务
 service docker stop     // 停止docker服务
1. 在docker中安装jenkins

一般我们习惯性的从docker远程仓储直接pull 镜像的最新版,而安装最新版的jenkins镜像, 镜像启动后, 在安装jenkins一系列的plugin 时, 重重受阻, 各种失败, 原因是docker hub 上最新的jenkins 只有2.60.1 版本,很多plugin 都是不支持的。
在jenkins 的官方docker 镜像博客里: docker hub 里面的jenkins 镜像已经不再维护, 建议使用: Jenkins/jenkins 。

  1. 拉取jenkins镜像
 docker pull jenkins/jenkins
  1. 启动jenkins
sudo docker run -d -u 0 --privileged  --name jenkins_gitlab -p 49003:8080 -v /root/jenkins_gitlab:/var/jenkins_home  jenkins/jenkins
  • -u 0

指的是传入root账号ID,覆盖容器中内置的账号

  • -v /root/jenkins_gitlab:/var/jenkins_home
    指的是 将docker容器内的目录/var/jenkins_home映射到宿主机
    /root/jenkins_gitlab目录上

  • --name jenkins_gitlab

将容器命名为 jenkins_gitlab

  • -p 49003:8080

端口映射,将容器的8080端口映射到宿主机的49003端口

  • --privileged

赋予最高权限

  • 整体含意
    运行一个镜像为jenkins/jenkinst的容器,命名为jenkins_gitlab,使用账root号覆盖容器中的账号,赋予最高权限,将容器的
    /var/jenkins_home映射到宿主机的
    /root/jenkins_gitlab目录下,映射容器中8080端口到宿主机49003端口
  1. 查看jenkins

执行完成后,等待几十秒,等待jenkins容器启动初始化。
可以查看宿主机 ' /root/jenkins_gitlab ' 下是否多了很多文件
这里访问http://服务器ip:49003 查看jenkins是否启动成功
看到如下界面说明启动成功:


jenkins.png
  • 上图需要输入管理员密码,以下命令查看,然后点击continue继续
cat /root/jenkins_gitlab/secrets/initialAdminPassword
  • 点击安装


    install.png

    install.png
  • 安装成功后,创建管理员账户


    creatAccount.png
  • 输入账号密码信息后点击保存(信息要填完),来到首页


    image.png
  • 配置jenkins, 首先安装相应的插件
    点击系统配置,如果这个页面有许多错误出现, 按照提示,去安装缺失的插件即可,如果安装特别慢也可以选择手动安装,插件安装方法如下:


    manageJenkins.png

    点击插件管理


    manageJenkins2.png.png
manageJenkins3.png.png
  • 安装ssh插件


    image.png

    成功安装后,进入系统管理--系统配置


    manageJenkins4.png

    configureSystem.png

选择高级,输入服务器IP,用户名,密码,然后点击 Test Configuration

  • 安装gitlab、gitlab hook插件(安装步骤同上,具体讲一些配置)
Jenkins-to-GitLab authentication
configureSystem2.jpeg

点击add,填写相应的gitlab api token


configureSystem3.png

获取gitlab的 access token


accessToken.png

系统配置好后,我们进行项目的配置

  1. 首先,新建一个项目


    creat-item.png
  2. 创建成功后,进入项目的配置页面,选择Source Code Management 进行代码仓库的配置


    gitlab.png
注意
  • 如果仓库地址选择http方式,一定要写服务器的ip地址,使用域名时会报错


    source-code.png
  • 认证的时候,可以选择username,password或者是gitlab api token的方式进行,点击add进行认证配置。如果是前者,配置完成后一定要重新去选择一下你刚才配置的用户名和密码,因为默认选中的不是你新填写的。

用户名,密码认证


credential.png

gitlab api token认证

  1. 源码管理配置完成后,我们可以移步 Build Environment,我们来搭建构建环境,选择Send files or execute commands over SSH after the build runs,输入我们需要执行的ssh脚本,同时服务器上进行相关的nginx配置


    build-environment.png

    事例的shell脚本如下

sudo docker stop nodeapp || true \
 && sudo docker rm nodeapp || true \ 
cd /root/jenkins_gitlab/workspace/vuejenkinsdemo  \
&& ls \
 && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_gitlab/workspace/vuejenkinsdemo:/home/project/ node \
&& pwd \
&& cd /root/jenkins_gitlab/workspace/vuejenkinsdemo \
&& ls \
&& npm i \
&& npm run build \
&& ls \

  1. 配置完成后,点击save,进入到项目的执行页面


    build.png

    console-output.png
  2. 到此,我们已经实现了手动一键部署

  3. 接下来我们配置GitLab webhook,实现自动部署

GitLab-to-Jenkins authentication
  • 进入到项目配置页面,选择build triggers,配置如下,gitlab webhook url 如图所示,然后点击advanced,找到secret token,点击生成,获得secret token的值


    build-triggers.png

    secreat-token.png
  • 移步gitlab, 找到项目,选择setting-->integrations,配置完成后选择add webhook,然后点击下方test,提示成功后,去jenkins构建页面可以看到有任务正在构建,也可以根据构建结果进行错误排查


    gitlab-webhook1.png

    gitlab-webhook2.png

    gitlab-webhook3.png
注意
  • 当点击test时,由于本地化的原因,报了500错误,修改方式是应该允许来自钩子和服务的对本地网络的请求,
    方式一:


    gitlab-configuration.png

    方式二:

curl -X PUT --header "PRIVATE-TOKEN:pKt5yVfsysShHg_r4xkT" http://gitlab.univ.com/api/v4/application/settings?allow_local_requests_from_hooks_and_services=true

其中,PRIVATE-TOKEN是在gitlab中获取的access token.但是这个需要权限。如果没有权限设置的话,让gitlab的管理员帮忙设置一下就可以了。

  1. 到此,我们已经完成了一个简单的项目自动化部署过程。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342