DevOps CI/CD之一: Jenkins和Github
最近周末没事,把开发过程中用到的东西重新整理一下,今天先从Jenkins开始,记录和github结合如何使用。
1. Jenkins 搭建和使用
- 一、采用Docker安装Jenkins
- 二、登录使用Jenkins
- 登录:
- 创建用户
- 创建一个新的job, 点击“new Item”, 选择Multibranch Pipeline.
- 添加Jenkinsfile
- 自动触发Job
- 总结
- 2. gitlab搭建
- 3. docker
- 4. k8s
- 5. sonar 代码扫描
- 6. jacoco 代码覆盖率
一、采用Docker安装Jenkins
- 首先需要安装docker,安装完docker后运行:
docker pull jenkins/jenkins
#如果要指定特定image,例如weekly
docker pull jenkins/jenkins:weekly
- 创建网络桥接
docker network create jenkins
- 为了在Jenkins节点上可以执行Docker命令,我们下载Docker:dind
docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR=/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jenkins_home \--publish 2376:2376 \docker:dind --storage-driver overlay2
–name: 指定docker的名称
–rm: 当docker不运行是自动移除image
–detach: 让docker在后台运行, 后续我们可以通过docker stop jenkins-docker来停止这个docker
–network: 使用上一步创建的网络
– network-alias:网络别名
–env:指定docker TLS证书的根目录
–volume: 连续两个都是相当于建立映射,把/certs/client映射叫做jenkins-docker-certs
–pushlish: 暴露docker的端口,用于在本地机器发送命令之间的通讯
docker:dind: image本身
–storage-driver overlay2:docker存储驱动
- 建立一个Dockerfile定制docker images
FROM jenkins/jenkins:2.346.3-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \https://download.docker.com/linux/debian \$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.6 docker-workflow:1.29"
- 基于上面这个dockerfile创建docker image
docker built -t jenkins:2.346.3-jdk11 .
- 运行上面创建的docker image
docker run --name jenkins-blueocean --restart=on-failure --detach \--network jenkins --env DOCKER_HOST=tcp://docker:2376 \--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \--publish 8080:8080 --publish 50000:50000 \--volume jenkins-data:/var/jenkins_home \--volume jenkins-docker-certs:/certs/client:ro \jenkins:2.346.3-jdk11
这里面最要注意的是 --publish,这两个当于建立本地和docker的端口映射,前面:后面,前面一个是本地端口,后面一个是docker的端口。
最后一个是第5步建立image的名称
至此, 我们可以通过已经在docker中运行起来了jenkins, 如何查看当前有哪些docker呢?在terminal中执行:
docker ps -a
二、登录使用Jenkins
登录:
- 前面已经在docker中把Jenkins运行起来了
接下来可以登录Jenkins并使用其功能
在浏览器中输入: http://localhost:8080,会需要输入密码:
我们可以通过以下命令获取:
#jenkins-blueocean 是docker的名字
docker logs jenkins-blueocean
cat /var/jenkins_home/secrets/initialAdminPassword
复制下来就可以登录了
创建用户
Name: Ekin
Password: *******
Full name: Ekin
Email: 53610289@qq.com
- 安装好很多的插件后,就可以看到这样的(我这里是已经加了一个job):
创建一个新的job, 点击“new Item”, 选择Multibranch Pipeline.
6. 在Branch Source中选择github, 同事也需要创建credential用来登录github和执行job,以及填入项目git的URL.
而Credentials对于System和Global两种的区别是:
Global - if the credential/s to be added is/are for a Pipeline project/item. Choosing this option applies the scope of the credential/s to the Pipeline project/item “object” and all its descendent objects. (Pipeline等通用的选择这个)
System - if the credential/s to be added is/are for the Jenkins instance itself to interact with system administration functions, such as email authentication, agent connection, etc. Choosing this option applies the scope of the credential/s to a single object only. (对Jenkins系统本身的设置相关的选择System)
还有一个是只作用Job本身的Credentials, 等创建完job后可以看到
Build设置通过Jenkinsfile:
这样就添加好了一个Job
添加Jenkinsfile
- 但是我们希望的是Jenkins能够去执行job,这里就需要再github的项目中添加一个文件:Jenkinsfile,内容大致像这样,然后提交代码。具体如何编写一个Jenkinsfile可以参考这里:
pipeline {// agent anyagent {docker {image 'node:16-alpine3.15'args '-p 3000:3000'}}stages {stage('Build') {steps {echo 'Building..'sh 'PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true yarn install'echo 'Finished Built..'}}stage('Test') {steps {echo 'Testing..'
// sh 'yarn dev'}}stage('Deploy') {steps {echo 'Deploying....'}}}
}
- 点击项目中 Scan Repository Now,就会生成一个执行任务
9. 点击Build/ Test /Deploy这几个步骤就可以查看里面的具体的log,支持基本完成CI设置。
自动触发Job
10 : 但我希望的提交代码后能够自动执行job,那这个需要再哪里设置呢?
有两种方式可以选择:
a. github webhook push的方式: 在github上设置回调url(这个url是jenkins上的),当有新的代码提交后,它会触发回调,执行相应的job。
Jenkins系统配置 --> github进行设置,获取到webhook url,然后在github项目settings-> webhook设置jenkins的回调url,由于是本地建立的localhost,没法成功回调,要求是通过域名回调。
b. 在Jenkins定时执行job,从github上pull code执行job。我们可以选择这种方式
总结
本篇介绍了如何在Docker中建立Jenkins,以及在Jenkins建立一个job,使其在代码提交时可以自动触发任务,这个任务的定义步骤在Jenkinsfile中定义,Jenkinsfile中可做较多的事情:比如几个步骤stage,像我们常做的事情,跑单测, build项目,测试环境自动化,uat环境测试,以及跑完自动化用例后,通过脚本更新结果,部署代码到生产环境等。
后续:
2. gitlab搭建
3. docker
4. k8s
5. sonar 代码扫描
6. jacoco 代码覆盖率
DevOps CI/CD之一: Jenkins和Github相关推荐
- iHealth基于Docker的DevOps CI/CD实践
本文由1月31日晚iHealth运维技术负责人郭拓在Rancher官方技术交流群内所做分享的内容整理而成,分享了iHealth从最初的服务器端直接部署,到现在实现全自动CI/CD的实践经验. 作者简介 ...
- 超长干货:基于Docker的DevOps CI/CD实践——来自iHealth的分享
前言 相信我,一切事情的发生都是赶鸭子上架,没有例外.人类所有伟大的变革都是迫不得已,可又是那么顺其自然.比如容器(docker)技术的诞生,比如箭在弦上的创业,比如野心勃勃的kubernetes,比 ...
- kubernetes之CI/CD工具jenkins第二篇,helm的使用
1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用: 1. 概述: 在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用.主要是jenkins ...
- 使用VSTS为ASP.NET Core构建DevOps CI/CD管道
目录 介绍 让我们深入了解基本概念 单体架构和微服务架构 敏捷和DevOps DevOps背后的推动力 持续集成 持续交付 持续部署 使用VSTS的ASP.NET Core应用程序的自动化CI 先决条 ...
- CI/CD之Jenkins+Gitlab
文章目录 一.Jenkinx+Gitlab持续集成环境概述 (1)什么是CI/CD (2)Jenkins概述 (3)Gitlab概述 (4)Gitlab和Github的区别 (5)Jenkins配合G ...
- 为 Kubernetes 提供 CI/CD 服务 Jenkins X
Jenkins X 是一个高度集成化的 CI/CD 平台,基于 Jenkins 和 Kubernetes 实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发.运行和部 ...
- GitHub也能CI/CD了 如何使用GitHub的Action?
GitHub也能CI/CD了!如何使用GitHub的Action? 一,什么是CI/CD 见另一篇文章 二,GitHub的Action GitHub的Action是一种自动化的CI/CD工具,可以让你 ...
- 【运维面试】DevOps CI/CD常见面试题
文章目录 1. 什么是DevOps 2. 什么是持续集成 3. 什么是持续交付 4. 什么是持续部署 5. 什么是持续测试及其好处 6. 什么是版本控制及其用途? 7. 什么是 Git? 8. 解释 ...
- Linux auditd rules generate 通用linux审计规则生成工具DevOps CI/CD持续集成交付 tools
app name gen-audit-rules linux generate auditd service rules tools Version 1.0 github.com/iotd/gen-a ...
最新文章
- 一图看懂新一代人工智能知识体系大全
- 【会议】2009-3-23
- poj 2480 (欧拉函数应用)
- sql增删改查_快速搞定数据库增删改查|附思维导图
- SQL笛卡尔积结合前后行数据的统计案例
- h3c交换机配置远程管理_高手给说下H3C交换机如何配置telnet远程登录
- 亚马逊被起诉!因女员工一天上六次厕所遭开除
- C++编程思想:指针,引用,拷贝构造函数,赋值运算符
- es6 --- Proxy实例的get方法
- a8处理器相当于骁龙几_天玑820相当于骁龙什么处理器?天梯图秒懂联发科天玑820性能排名...
- 七、 面向对象(二)
- [html] HTML5的video怎么取消自动播放?
- Spark之scala学习(基础篇)待更新
- loadrunner 参数化
- asp.net程序的问题原来是IE造成的,改用firefox就没问题了!
- html几个数据包,报文和数据包的区别
- 全球首台商用量子计算机发布!体积如同大象,算力不及笔记本
- 【Python】安装IPython和IPthon Notebook
- 【转】win7旗舰版英文版下载(64位|32位)|Windows7英文版ISO镜像
- Linux运维工程师面试知识点汇总(二)