Jenkins + Gitlab 实现代码流水线部署
DevOps
DevOps 概述
DevOps(Development和Operations的组合词)是一种重视 “ 软件开发人员(Dev)” 和 “ IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例;
通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠
DevOps 平台
代码托管 --- Gitlab、SVN
项目管理 --- Jira、Teambition、禅道
运维平台 --- 腾讯蓝鲸、自主研发平台
持续交付 --- Jenkins、Gitlab
CI / CD 概述
CI
Continuous Integration
指多名开发在开发不同代码的过程中,可以频繁的将代码合并到一起并且互不影响
属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中
CD
持续交付(Continuous Delivery)
持续部署(Continuous Deployment)
指持续交付或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度
持续交付通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表)
然后由运维团队将其部署到实时生产环境中
旨在解决开发和运维团队之间可见性及沟通较差的问题
因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量
基本流程
代码提交后先部署到 test 环境,测试代码是否跑的正常,有无 bug -- 环境比较单一
测试完成后部署到 staging 环境,看程序是否正常 -- 与生产环境环境基本一直,数据都是从生产导出来的
验收后部署到 prod 环境
Git 仓库
分布式版本库
git是用于 Linux 内核开发的版本控制工具
与 CVS、Subversion 一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便
GitHub
基于 git 的一个公有代码仓库
Gitlab
基于 git 的一个私有代码仓库
GitLab 部署
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.1.12-ce.0.el7.x86_64.rpm
# 在清华镜像站下载 gitlab-ce 的安装包
rpm -ivh gitlab-ce-12.1.12-ce.0.el7.x86_64.rpm
# 安装 gitlab-ce 的 rpm 包
[root@vida src]# vim /etc/gitlab/gitlab.rb
# Please configure a URL for your GitLab instance by setting `external_url`
# 修改配置文件更改访问 URL
[root@vida src]# gitlab-ctl reconfigure
# 重启更新配置
[root@vida src]# gitlab-ctl status
# 查看服务状态
# 邮箱配置
gitlab_rails['smtp_enable'] = true #启用smtp服务
gitlab_rails['smtp_address'] = "mail.gmail.com" #smtp发送服务器
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "erikcloudops@gmail.com"
gitlab_rails['smtp_password'] = "123456lllu"
gitlab_rails['smtp_domain'] = "gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = 'erikcloudops@gmail.com' # 与 smtp_user_name 一定要一样
gitlab_rails['gitlab_email_reply_to'] = 'erikcloudops@gmail.com'
关闭 sign up
管理员权限登陆
setting -- Sign-up restrictions -- 关闭 sign up enable
仓库配置
Git global setup
配置全局的用户名和邮箱
git config --global user.name "vida"
git config --global user.email "vida@weexglobal.com"
Create a new repository
创建一个新的仓库
git clone http://47.108.239.186/root/wallet.git
cd wallet
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Push an existing folder
推送现有的文件
cd existing_folder
git init
git remote add origin http://47.108.239.186/root/wallet.git
git add .
git commit -m "Initial commit"
git push -u origin master
Push an existing Git repository
推送现有的 Git 仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin http://47.108.239.186/root/wallet.git
git push -u origin --all
git push -u origin --tags
回滚版本
git reset --hard HEAD^
# 递归回滚,代码拉取到本地后回滚版本 HEAD^ HEAD^^ 回滚几个版本就加几个 ^ 号
Jenkins
Jenkins 概述
开源的 CI / CD 软件
用于各种自动化任务,包括构建,测试和部署软件
使用 JAVA 语言编写,起源于 Hudson
插件化,目前拥有 1500+ 插件实现各种功能
Jenkins 部署
Linux 安装
需要安装JDK环境
yum -y install java-1.8.0-openjdk
# 安装 openjdk ,1.8.0 以上
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.343-1.1.noarch.rpm
# 下载 jenkins 安装包
rpm -ivh jenkins-2.343-1.1.noarch.rpm
# 安装
systemctl start jenkins
# 启动
systemctl status jenkins
# 查看状态
Docker 安装
配置好 docker 环境
docker run \-u root \--rm \ # jenkinsci/blueocean 关闭时自动删除Docker容器-d \ # jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID-p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
解锁 Jenkins
/var/jenkins_home/secrets/initialAdminPassword
# 进入文件读取密码
Jenkins 拉取代码
Jenkins 从 Gitlab 拉取代码
Gitlab 添加服务器公钥
[root@vida ~]# ssh-keygen
# 生成一个秘钥
[root@vida ~]# cd /root/.ssh
[root@vida .ssh]# ls
authorized_keys id_rsa id_rsa.pub
# id_rsa 是私钥 id_rsa.pub 是公钥
打开 Gitlab -- 设置 -- SSH keys -- 添加公钥
[root@vida ~]# yum -y install git
# 安装 git 测试
[root@vida opt]# git clone git@47.108.239.186:vida-test/my-vida.git
# git clone 不需要输入密码
# 只能作为只读使用,不能提交代码
测试拉取代码
新建一个自由风格的项目
源码管理选择 Git
添加:Repository URL 和 Credentials
Private Key 为 Jenkins 服务器的私钥
创建好 Job 后,选择立即创建
Started by user unknown or anonymous Running as SYSTEM Building in workspace /var/lib/jenkins/workspace/vida-devops # /var/lib/jenkins/workspace/vida-devops Jenkins 服务器中查看拉取到的代码是否和 Gitlab 上一致 The recommended git tool is: NONE using credential 7e07473f-ef7b-4c9d-beea-333aa94ee826 Cloning the remote Git repository Cloning repository git@192.168.119.132:root/test.git> git init /var/lib/jenkins/workspace/vida-devops # timeout=10 Fetching upstream changes from git@192.168.119.132:root/test.git> git --version # timeout=10> git --version # 'git version 1.8.3.1' using GIT_SSH to set credentials > git fetch --tags --progress git@192.168.119.132:root/test.git +refs/heads/*:refs/remotes/origin/* # timeout=10> git config remote.origin.url git@192.168.119.132:root/test.git # timeout=10> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch> git rev-parse refs/remotes/origin/master^{commit} # timeout=10 Checking out Revision 75359dbf8b454499aab4efb00ae0c6b6efa94ce4 (refs/remotes/origin/master)> git config core.sparsecheckout # timeout=10> git checkout -f 75359dbf8b454499aab4efb00ae0c6b6efa94ce4 # timeout=10 Commit message: "v1" First time build. Skipping changelog. Finished: SUCCESS
Jenkins 流水线
Jenkins 流水线 (或简单的带有大写"P"的"Pipeline") 是一套插件,支持实现和集成 continuous delivery pipelines 到 Jenkins
对 Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库
Jenkinsfile
自动地为所有分支创建流水线构建过程并拉取请求
在流水线上代码复查 / 迭代 ( 以及剩余的源代码 )
对流水线进行审计跟踪
该流水线的真正的源代码,可以被项目的多个成员查看和编辑
声明式和脚本化的流水线语法
声明式和脚本化的流水线从根本上是不同的
声明式流水线的是 Jenkins 流水线更近的特性
相比脚本化的流水线语法,它提供更丰富的语法特性,
是为了使编写和读取流水线代码更容易而设计的
Code: 流水线是在代码中实现的,通常会检查到源代码控制, 使团队有编辑, 审查和迭代他们的交付流水线的能力
Durable: 流水线可以从 Jenkins 的主分支的计划内和计划外的重启中存活下来
Pausable: 流水线可以有选择的停止或等待人工输入或批准,然后才能继续运行流水线
Versatile: 流水线支持复杂的现实世界的 CD 需求, 包括 fork / join , 循环, 并行执行工作的能力
Extensible: 流水线插件支持扩展到它的 DSL 的惯例和与其他插件集成的多个选项
声明式流水线基础
Jenkinsfile (Declarative Pipeline)
pipeline {agent any stages {stage('Build') { steps {// }}stage('Test') { steps {// }}stage('Deploy') { steps {// }}}
}
在任何可用的代理上,执行流水线或它的任何阶段。
定义 "Build" 阶段。
执行与 "Build" 阶段相关的步骤。
定义"Test" 阶段。
执行与"Test" 阶段相关的步骤。
定义 "Deploy" 阶段。
执行与 "Deploy" 阶段相关的步骤
脚本化流水线基础
Jenkinsfile (Scripted Pipeline)
在脚本化流水线语法中, 一个或多个
node
块在整个流水线中执行核心工作
node { stage('Build') { // }stage('Test') { // }stage('Deploy') { // }
}
在任何可用的代理上,执行流水线或它的任何阶段。 定义 "Build" 阶段。 stage 块 在脚本化流水线语法中是可选的。 然而, 在脚本化流水线中实现 stage 块 ,可以清楚的显示Jenkins UI中的每个 stage 的任务子集。 执行与 "Build" 阶段相关的步骤。 定义 "Test" 阶段。 执行与 "Test" 阶段相关的步骤。 定义 "Deploy" 阶段。 执行与 "Deploy" 阶段相关的步骤
流水线示例
Jenkinsfile (Declarative Pipeline)
# Toggle Scripted Pipeline (Advanced) pipeline 是声明式流水线的一种特定语法,他定义了包含执行整个流水线的所有内容和指令的 "block" 。 agent是声明式流水线的一种特定语法,它指示 Jenkins 为整个流水线分配一个执行器 (在节点上)和工作区。 stage 是一个描述 stage of this Pipeline的语法块。在 Pipeline syntax 页面有关声明式流水线语法的`stage`块的信息。如 above所述, 在脚本化流水线语法中,stage 块是可选的。 steps 是声明式流水线的一种特定语法,它描述了在这个 stage 中要运行的步骤。 sh 是一个执行给定的shell命令的流水线 step (由 Pipeline: Nodes and Processes plugin提供) 。 junit 是另一个聚合测试报告的流水线 step (由 JUnit plugin提供)。 node 是脚本化流水线的一种特定语法,它指示 Jenkins 在任何可用的代理/节点上执行流水线 (和包含在其中的任何阶段)这实际上等效于 声明式流水线特定语法的`agent`。
Jenkins + Gitlab 实现代码流水线部署相关推荐
- 解放双手 | Jenkins + gitlab + maven 自动打包部署项目
前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...
- Jenkins+Gitlab+SonarQube 代码质量管理集成
Jenkins+Gitlab+SonarQube 代码质量管理集成 一.环境准备 1.1.JDK11环境安装 1.2.Docker环境下搭建SonarQube所需的PostgreSQL数据库 1.2. ...
- Jenkins之Pipeline代码流水线
Pipeline翻译过来就是流水线的意思,在公司中可能会有很多项目,如果使用Jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦,因此,pipeline就应用而生了 . 一.部署Pipel ...
- Gitlab+Docker构建流水线部署
[架构] 整体的设计思路是通过gitlab的runner将版本发布到各个环境,通过Apollo配置中心来区分环境配置,做到一次构建到处运行.生产环境镜像库根据实际情况来定,有些用的AWS ECR,有些 ...
- Jenkins + gitlab webhook实现自动化部署
1.先在Jenkins安装插件Gitlab Hook Plugin 和Build Authorization Token Root Plugin: 2.插件安装完成后在任务里添加token 3.在gi ...
- Jenkins + Gitlab + Ansible--playbook 代码上线流程
jenkins 构建是支持 git 选择分支 安装 Git Parameter 插件 在系统管理中的插件管理 然后点击选插件,在右上角输入 Git Parameter,找到 Git Parameter ...
- gitlab 不打tag怎么查看随机tag_Jenkinsamp;Gitlab实现自动化测试脚本部署
概述 持续集成是什么? 典型的工作流程包括以下几个步骤:开发-提交-编译-测试-发布持续集成是一个开发的实践,需要开发人员定期集成代码到共享存储库.持续集成要求开发人员有频繁的构建.最常见的做法是,每 ...
- 持续集成[代码流水线管理及Jenkins和gitlab集成]-自动化部署05
安装sonar Scanner 打开http://www.sonarqube.org/官网 找到下面扫描器 通过这个扫描器可以分析代码分析 因此你也的安装这个扫描器 上传sonar-scanner-2 ...
- gitlab 自动推送代码到gitee_Gitlab 利用 Webhook+jenkins 实现自动构建与部署
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布. 这种方式每次在发版的时候,需要人工去执行j ...
最新文章
- mysql多个实例 主从库_mysql主从复制系列(1)搭建多个mysql实例环境
- 各路资本暗战智能家居
- 看穿机器学习(W-GAN模型)的黑箱
- daterangepicker java_日期选择插件Date Range Picker
- php项目的建立,PHP开发-ZendStudio初学教程-建立PHP项目
- 微信分享到朋友圈onMenuShareTimeline成功后的回调函数在某系ios手机下不执行的问题...
- vfifo控制mig_virtual fifo的使用
- java打印插件_java c/s项目中有没有好用的打印插件?
- 在发送邮件HTML中,CSS等问题
- python类属性定义_Python中类的定义与使用
- 天正多条线段长度lisp下载_如何快速计算cad中多条多段线的总长
- Android 真实简历
- R语言Fisher检验的workspace问题
- 大数据在生活中有哪些应用举例?大数据好找工作吗?
- 只有迷信的人,没有迷信的知识
- 第一次用VNPY,通过仿真测试,踩过千万坑,我太难了~~~~~~
- 技术支撑团队技术支持工程师的技能要求
- Excel数据透视表经典教程七《刷新及更改数据源》
- grep egrep命令中-w选项的用法
- break、continue、goto