使用Jenkins对接Github进行自动化CI

简介: 使用Jenkens对接GitHub进行自动化构建

Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

Jenkins在 Docker hub 上有官方镜像社区镜像, 根据官方描述,Jenkins的镜像已经由社区接管维护,镜像为jenkinsci/jenkins,所以这次的集成就用这个社区版的Jenkins。

Docker 信息

  ~ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:20:16 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:58 2018
  OS/Arch:      linux/amd64
  Experimental: false

配置Jenkins的compose.yml文件

因为我的docker已经进行了swarm集群处理,所以可以用docker compose写配置,然后一键运行。

docker-compose.yml

version: '3'

services:
  jenkinsContainer:
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
      - 3000:5000
    volumes:
        - "./jenkins_home:/var/jenkins_home"
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
      placement:
        constraints:
          - node.role == manager

说明

  • image: jenkins/jenkins:lts, 使用最新的社区版本的jenkins;
  • ports: 8080:8080是浏览器端控制jenkins对应的端口,使用时,用ip:port即可,3000:5000是你要通过JNLP进行从节点构建的时候用的,在本次配置中并没有用到;
  • volumes: "./jenkins_home:/var/jenkins_home",将jenkins的配置存放在本地,防止重启后重新初始化jenkins,该文件可以自己创建,也可由Docker在运行时创建。
  • deploy: 这是和swarm集群部署相关的,就不细细讲了。

因为部署需要执行如下一行代码

docker stack deploy --compose-file=docker-compose.yml jenkins

防止每次重启都要键入,特地的,我们创建一个deploy脚本,加入可执行权限,每次执行这个脚本即可

  echo "docker stack deploy --compose-file=docker-compose.yml jenkins" > deploy
  chmod +x ./deploy

执行后的目录如下

  Jenkins tree -L 1
.
├── deploy
├── docker-compose.yml
└── jenkins_home

1 directory, 2 files

部署

执行如下命令即可

  ./deploy
Creating network jenkins_default
Creating service jenkins_jenkinsContainer

安装Jenkins

浏览器端打开ip:8080,在这我的地址为47.95.247.xxx:8080,端口后面切记不要加/jenkins, 这是Jenkins的bug,不然你的页面在登录后就会出错。

登录密码获取

  • 进入运行的容器中,打印
  docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS       NAMES
c12c47c804ba        jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   3 minutes ago       Up 3 minutes        8080/tcp, 50000/tcp   jenkins_jenkinsContainer.1.ntkjvt6u4kxjyvprc0rdrif05
 docker exec -it c12c47c804ba /bin/bash
 cat /var/lib/jenkins/secrets/initialAdminPassword
XXXXXXXXXXXXXXXXXXXXXX  # 这就是密码
  • docker logs,使用docker logs 查看安装日志,密码也是在安装日志中的
  docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS       NAMES
c12c47c804ba        jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   3 minutes ago       Up 3 minutes        8080/tcp, 50000/tcp   jenkins_jenkinsContainer.1.ntkjvt6u4kxjyvprc0rdrif05
  docker logs -f c12c47c804ba
 XXXXXXXXXXXXXXXXXXXXXX  # 这就是密码

输入密码后,选择推荐的安装,安装时间比较长,可以喝一杯茶或者咖啡去。
安装好自动进入主页。

配置Jenkins 使之和GitHub进行交互的基础环境

全局工具配置

  • git:主要提供git操作,如拉去代码。
    image
  • node: 为我们的前端项目打包提供基础运行环境。
    image

里面的内容都可以选择配置,我们选择nodejs 11这个版本。配置完毕选择应用即可。

系统设置

系统设置主要设置jenkins的地址和系统管理员的邮箱地址,还有与github之间的通信,要让github接受到push等命令触发CI/CD,就涉及到这块。

Jenkins Location

image

GitHub

  1. 添加GitHub Server 并填写名称
    image
  2. https://github.com/settings/tokens/new上生成token,需要的权限就三个,而且repo:status在repo中,所以可以不选,下图是所需要求,
    image
  3. 在GitHub上生成Token之后,copy该Token, 在Jenkins 凭据提供者: Jenkins页面中的类型中选择Secret text, Secret中粘贴GitHub生成的Token,id和描述可以随便填写。
    image
  4. 点击添加后,回到主页面,在凭据中选择刚才创建的凭据,点击连接测试,若不成功,返回重新操作以上步骤,点击下面的应用或保存完成配置。
    image

至此,基础配置完成。

添加测试项目

  1. 在首页添加新任务,选择自由风格的项目
    image
  2. 选择GitHub,键入要构建项目地址的主页地址,注意不是git资源地址
    image
  3. 源码管理配置
    image
  4. 构建触发器
    image
  5. 构建环境
    image
  6. 构建,选择执行shell,键入如图中的shell
    image
  7. 点击应用,保存,至此,完成GitHub项目在Jenkins的设置。

配置webhook

只有Jenkins和GitHub配置了相同的webhook,才能通信,才能达到开发者向GitHub push代码的时候Jenkins 才能收到ton通知进行后面的CI/CD。

  1. 进入系统管理/系统配置,定位到GitHub配置项,点击底部的高级按钮,键入协议://Jenkins地址(IP:Port)/自定义名称。
    image
  2. 在GitHub上打开你项目的setting页面,进入webHooks页面,点击右上角的 Add webhook,进入页面执行如下
    image

运行

在本地或者github上修改文件,对其进行push, Jenkins会收到通知,然后运行程序进行打包。

  1. 打开刚才创建的任务,进入详情,可以看到收到的GitHub push的消息。
    image
  2. Jenkins开始构建
    image
  3. 构建成功的效果
    image

总结

遇到问题还是要慢慢解决滴。在此做个总结。

目录
相关文章
|
4天前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
|
21天前
|
jenkins Linux 持续交付
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
|
25天前
|
小程序 前端开发 持续交付
小程序全栈开发中的CI/CD流程与自动化部署是一种高效的开发模式。
本文探讨小程序全栈开发中的CI/CD流程与自动化部署,介绍持续集成与部署的概念,包括自动化构建、测试、代码审查及部署实践。通过提高代码质量、迭代速度及团队协作效率,确保小程序稳定运行与良好用户体验。
39 2
|
11天前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
25 0
|
1月前
|
弹性计算 监控 JavaScript
【颠覆传统!】云效Flow——让你的CI/CD流程如虎添翼,轻松驾驭高效稳定的自动化部署之旅!
【8月更文挑战第8天】现代软件开发中,持续集成(CI)与持续部署(CD)至关重要。我最近使用了“云效Flow”,一款专为高效稳定的CI/CD流程设计的工具。它支持多种语言与框架,并易于集成第三方服务。只需注册并创建项目,平台便提供新手引导。以Node.js项目为例,代码托管在GitHub上后,在云效Flow中设置流水线,通过YAML自定义构建与测试步骤。代码提交后,构建自动执行。部署环节可利用内置策略,如一键发布到阿里云ECS,并支持蓝绿部署确保平滑切换。此外,云效Flow还具备监控与告警功能。总之,云效Flow简化了CI/CD流程,提高了开发效率与软件质量,适合各种规模的团队使用。
58 2
|
12天前
|
Devops jenkins 持续交付
DevOps 实践:自动化部署与持续集成的无缝对接
【8月更文挑战第30天】本文旨在通过浅显易懂的语言,向读者展示如何在现代软件开发中实现 DevOps 理念下的自动化部署和持续集成。我们将从基础概念出发,逐步深入到实际操作,不仅分享理论知识,还将提供具体的代码示例,帮助读者快速掌握如何将这两个关键环节有效结合,以提高开发效率和软件质量。
|
14天前
|
Devops 持续交付 开发者
.NET自动化之旅:是Azure DevOps还是GitHub Actions能够打造完美的CI/CD流水线?
【8月更文挑战第28天】在现代软件开发中,持续集成(CI)与持续部署(CD)是提升代码质量和加速交付的关键实践。对于 .NET 应用,Azure DevOps 和 GitHub Actions 等工具可高效构建 CI/CD 流水线,提升开发效率并确保软件稳定可靠。Azure DevOps 提供一站式全流程管理,支持 YAML 定义的自动化构建、测试和部署;GitHub Actions 则以简洁灵活著称,适用于 .NET 项目的自动化流程。选择合适的工具可显著提高开发效率并确保高质量标准。
10 0
|
14天前
|
监控 Devops jenkins
DevOps实践:构建自动化CI/CD流水线
【8月更文挑战第28天】本文深入探讨了DevOps文化下,如何通过构建自动化的持续集成和持续部署(CI/CD)流水线来提高软件开发的效率和质量。文章不仅分享了构建流水线的步骤,而且提供了实际的代码示例,旨在帮助读者理解并实现自己的自动化流程。
|
29天前
|
jenkins 持续交付 开发工具
自动化开发之旅:Docker携手Jenkins,与Git和Tomcat共舞持续集成
【8月更文挑战第13天】在软件开发中,持续集成(CI)通过自动化构建、测试与部署提升效率与稳定性。Docker、Jenkins、Git和Tomcat构成CI的黄金组合:`git push`触发Jenkins作业,利用Docker确保环境一致性,最终将应用部署至Tomcat。首先配置Git Webhooks以触发Jenkins;接着在Jenkins中创建作业并使用Docker插件模拟真实环境;通过Maven构建项目;最后部署至Tomcat。这套流程减少人为错误,提高开发效率,展示了技术的力量与流程的革新。
41 0
|
29天前
|
jenkins Java 持续交付
自动化魔法:用Jenkins打造Java项目的持续部署流水线
【8月更文挑战第13天】在软件开发中,自动化部署是提高效率与减少错误的关键。Jenkins作为一款强大的持续集成工具,支持Java项目的自动化构建、测试与部署。通过配置Jenkins及其丰富的插件生态(如Git和Maven插件),可实现从代码提交到上线的全自动化流程。此流程包括从GitHub自动拉取代码、使用Maven构建项目,并通过如`mvn clean install`命令执行构建,最后利用插件如“Publish Over SSH”将制品部署至远程服务器。此外,还可配置邮件通知等后处理动作确保发布的稳定可靠。借助Jenkins,开发者能显著加速软件交付周期,同时减少手动操作带来的风险。
47 0