Jenkins automate workflow
Now we will build an automate flow from code compiling to product delivery.
The essential tools using here are:
- GitHub (or other VCS)
- Jenkins
- Docker
- A web app for demo (use Ruby here)
1. Project
这个项目基本只有三个文件,分别是 Dockerfile
用于打包镜像,Jenkinsfile
用于Jenkins 执行自动测试、编译等构建工作,还有 app.rb
是一个 web 项目,用来模拟真实环境中的 web 开发项目,下面我将介绍具体步骤。
2. Create GitHub webhooks
我们首先需要创建这个 Git 项目,并 push 到 GitHub 上,在项目的设置界面添加 Webhooks
通过 Webhook 可以在你向 github 仓库推送代码时,通过 HTTP 请求向任意的 web server 发送通知信息,在这里我们用它来通知 Jenkins。
这里的 Payload URL 就是接受请求的 Jenkins 地址,但这个地址稍微有些复杂,你会在下一节中看到这个 URL 的具体格式。
3. Config the jenkins
我们使用 Docker 容器技术来搭建一个 Jenkins 服务,通过 docker 安装 Jenkins 非常容易,如果你使用 mac 或者 linux,只需要一条命令:
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
如果你在安装 Jenkins 遇到了问题,你可以查看 Jenkins 官方文档 https://jenkins.io/doc/book/installing/
在浏览器中打开 http://localhost:8080/ ,在完成初始化安装后可以看到主界面如下图:
通过左边的 New Item
按钮创建你的第一个 Jenkins 项目吧!
在配置页面有很多不同类型可供选择,在这里我们选择 Pipline
按下面的 OK 进入下一步。
在项目的配置页面,我们首先设定通过外部脚本(trigger builds remotely)触发 Jenkins 的 pipline 脚本。Authentication token
可以随便填入一串随机字符串,输入框下面的注释就是上面 GitHub webhook 需要用到的 URL。
具体来说, GitHub webhook 中的 payload URL 应该是这样的格式:http://<jenkins_username>:<jenkins_api_token>@<jenkins_server:port>/job/<jenkins_item_name>/build?token=<authentication_token>
<jenkins_api_token>
需要你在 user 的 configure 界面自行创建,如下图所示:
Jenkins pipline 是一种领域特定语言, 我们用它来自动创建 docker 镜像,pipline 也可以被放进项目中,通过 Git 进行版本控制,所以在这里我们从 GitHub 上拉取 pipline 脚本。这里的 Script Path
就是 pipline 脚本的名字,如果路径错误 Jenkins 是无法找到正确的脚本的。
我使用的 pipline 脚本比较简单,只是执行一些 shell 语句,
其中区分成 build
和 post
两个阶段:
pipeline {
agent any
stages {
stage('build') {
steps {
sh 'rm -rf just_test/'
sh 'git clone --depth=1 https://github.com/xxx/just_test'
sh 'cd just_test'
sh "docker build -t just_test/v${env.BUILD_ID} . "
}
}
stage('post') {
steps {
sh 'docker stop $(docker ps -a -q --filter="name=justtest")'
sh "docker run -p 4567:4567 --rm --name=justtest -d just_test/v${env.BUILD_ID}"
}
}
}
}
简单解释一下这个 pipline 脚本,在 Jenkins 创建的工作目录中,克隆 github 项目,进入项目目录,调用 docker build 打包新的 docker 镜像,docker build 会调用项目中的 Dockerfile 来创建 docker 镜像。然后是停止旧的 App 容器,并将刚才打包好的镜像启动。
4. Dockerfile
使用 Dockerfile 来打包镜像,代码如下:
# Use an official Ruby runtime as a parent image
FROM ruby
# Set the working directory to /app
WORKDIR /usr/src/app
# 将当前目录拷贝至 docker container 中的当前目录
COPY . .
# 运行 sh 命令(安装 ruby 软件包)
RUN gem install sinatra
EXPOSE 4567
# 启动 ruby 服务器
CMD ["ruby", "app.rb"]
Jenkins automate workflow的更多相关文章
- Using git-flow to automate your git branching workflow
Using git-flow to automate your git branching workflow Vincent Driessen’s branching model is a git b ...
- [tmux] Automate your workflow using tmux scripts
Do you have a standard workflow that involves setting up a specific tmux layout, or running certain ...
- 构建Docker+Jenkins持续集成环境
docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致 ...
- Jenkins iOS – Git, xcodebuild, TestFlight
Introduction with Jenkins iOS If you are new to continuous integration for mobile platforms then you ...
- Front end workflow
标签:请叫我红领巾 记一哈记一哈 ^_^ 推荐个不错的群 自己刚开始折腾的时候也是无处下手,渺茫啊.然而我是有一个很好的前端群(真的很棒,欢迎加入:[375042952]),关注群里的每一次讨论,每一 ...
- 解决jenkins构建job报错“NoClassDefFoundError” in jenkins/scm/RunWithSCM问题
现象 使用Jenkins 2.8,当我运行一个简单的Jenkins工作时,构建一个job获取源代码,出现下面的错误 FATAL: jenkins/scm/RunWithSCM java.lang.No ...
- Jenkins Pipeline高级用法-ShareLibrary
1.Github配置 1.1 上传jenkinsfile到github https://github.com/zeyangli/ShareLibrary-jenkins.git 2.Jenkins配置 ...
- [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://gith ...
- Jenkins之使用Pyinstaller构建Python应用程序
目录 1. 极简概述 2. Jenkins配置 2.1 安装JDK 2.2 安装Jenkins 3. 安装Docker 4. 使用PyInstaller构建Python应用程序 4.1 Fork 一个 ...
随机推荐
- hadoop 完全分布式搭建总结
完全分布式--------------- 1.配置文件 [core-site.xml] hdfs 地址 fs.defaultFS=hdfs://s129:8020/ [hdfs-site.xml] 副 ...
- Scratch编程:游泳的火柴人(四)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个手绘的火柴人在水里游泳. ...
- 立体像对空间前方交会-点投影系数法(python实现)
一.原理 二.步骤 a.用各自像片的角元素计算出左右像片的旋转矩阵R1和R2. b.根据左右像片的外方位元素计算摄影基线分量Bx,By,Bz. c.逐点计算像点的空间辅助坐标. d.计算投影系数. e ...
- 初试牛刀:实时天气WebService
1.引入WebService:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 2.声明接口→界面获取值传入接口→接口返回值处理→ ...
- VsCode开发Angular的必备插件
1 概述 一般个人开发或者小公司开发都会使用破解版软件,除非比较尊重正版且不太缺钱的人才会用正版,但是大型公司有严格的规定,不允许员工使用盗版软件. 这时候我就不得不从WebStorm转向VsCode ...
- 在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )
原文:在论坛中出现的比较难的sql问题:33(递归 连续日期问题 ) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...
- springboot_3
1. 返回数据与返回页面 在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据. 返回一个页面, ...
- "多层感知器"--MLP神经网络算法
提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中 ...
- c#基础知识梳理(一)
一.C#简介 C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.C#看起来与Java有着惊人的相似:它包括了诸如单一继承.接口.与Java几乎同样的语法和编 ...
- jquery事件委托详解
jQuery事件委托处理流程 上一章分析jQuery.event.add的时候已经分析了事件绑定,再把绑定的部分源码抽出来 if ( !(eventHandle = elemData.handle) ...