jenkins+github自动部署

1.jenkins安装

下载jenkins

官方网页下载: https://jenkins.io/zh/doc/pipeline/tour/getting-started/
直接下载链接: http://mirrors.jenkins.io/war-stable/latest/jenkins.war

2.运行jenkins

java -jar jenkins.war --httpPort=9999

打开网页: http://ip:port/可以看到:

image.png

过一会后命令行显示(框起来的是密码):
image.png

等待网页加载jenkins:
image.png

输入密码即可进入jenkins

3.Jenkins安装插件提速

  1. 进入jenkins配置目录: cd ~/.jenkins
  2. 进入插件配置目录: cd updates
  3. 更换插件下载地址: sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
  4. 重新启动jenkins,需要记录管理员密码

4.安装插件

image.png

5.创建管理员

image.png

6.配置根URL

按照他默认的即可


image.png

7.集成github的WebHook

注意: 部署jenkins服务器必须要是有公网IP的服务器

  1. 打开jenkins管理界面


    image.png
  2. 进入jenkins配置界面


    image.png
  3. 点击高级


    image.png
  4. 配置jenkins回调地址


    image.png
  5. 点击应用


    image.png
  6. github上创建一个项目仓库
    创建一个仓库,私有或公共仓库均可


    image.png
  1. 进入配置仓库WebHook界面


    image.png
  1. 配置仓库的WebHook
    当有人对这个仓库发出push时候,github会调用配置的WebHook地址,这个地址就配置第4步jenkins的回调地址

点击添加WebHook


image.png

点击保存

8.使用BlueOcean进行项目构建

此处使用jenkins最新的Blue Ocean构建项目

  1. 进入插件安装界面


    image.png

    image.png
  2. 安装blue ocean插件

    image.png

  3. 返回首页


    image.png
  4. 进入Blue Ocean界面


    image.png
  5. 创建流水线


    image.png
  6. 选择github


    image.png
  7. 为jenkins创建访问github的 access token


    image.png
  8. 在github上创建即可


    image.png

    点击最后的创建


    image.png
  9. 在jenkins填写生成的token
    输入token,点击connect

    image.png

  10. 选择用户


    image.png
  11. 选择项目


    image.png

    最后因为仓库没有Jenkinsfile文件,会显示如下界面


    image.png

此时,会因为github仓库中没有Jenkinsfile文件,无法进行自动化构建,下面准备编写Jenkinsfile文件

9. 准备一个自动化构建项目

  1. 准备一个Java项目,我们将它进行自动化构建
    项目很简单,使用maven创建一个项目,编写Main.java文件
// Main.java
/**
 * @author: jiangxch
 * @date: 2019/12/31 12:57
 */
public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 11; i++) {
            System.out.println("hello world");
        }

    }
}
  1. 将项目打包成一个可执行的jar包
    因为我们的演示期望可以使用java -jar xxx.jar来执行main函数,所以需要打包成一个可执行的jar文件
    pom.xml添加
     
        
            
                org.apache.maven.plugins
                maven-assembly-plugin
                
                    
                        package
                        
                            single
                        
                        
                            
                                
                                    
                                        
                                        com.sanjin.jenkins.demo.Main
                                    
                                
                            
                            

                                
                                jar-with-dependencies
                            
                        
                    
                
            
        
    

使用mvn clean package进行打包,可以看到target中生成的jar文件

image.png

使用java -jar target/jenkins-demo-1.0-SNAPSHOT-jar-with-dependencies.jar执行,注意不是jenkins-demo-1.0-SNAPSHOT.jar,输出如下:

image.png

  1. 编写Jenkinsfile文件进行自动化部署
    回想一下上面java项目部署的步骤:1编译 2部署
    我们需要通过jenkins实现这一过程

10. 编写Jenkinsfile自动构建脚本

  1. 我们先将项目与远程库连接
    git remote add origin https://github.com/jiangxiaochuan/jenkins-demo.git

  2. 为jenkins配置docker
    由于我们要实现编译、部署的过程,所以使用docker是最方便的,一些公司也都是用这种方式进行构建的。

  • 首先需要在运行jenkins的服务器上安装docker,此处自行查阅资料
  • 其次jenkins需要安装docker插件
  1. 在项目目录下创建Jenkinsfile文件
    我用的Linux系统,就用touch命令创建了
    touch Jenkinsfile
    注意文件名称: 一定要是 Jenkinsfile
    内容如下:
pipeline {

  // 设置全局变量
  environment {
    // jar 文件的stash名称,maven编译好的jar包需要转移到jdk容器中
    STASH_JAR = "targetfiles"
    // 宿主机maven的.m2目录,会将宿主机的maven库挂载到maven容器中,不需要下载过多的jar包
    MAVEN_M2_PATH = "/home/lanlan/.m2"
    // jar镜像名称,定义jar文件名 ->
    IMAGE_JAR_NAME = "${JOB_NAME}:latest"
  }

  agent none
  stages{

    // 进行maven构建
    stage('Build jar file'){
        agent {
          // 制定docker镜像,jenkins会自动拉取image,运行一个容器
          // 所以需要部署jenkins的服务器事先安装好docker
          docker {
            image 'maven:3-alpine'
            args "-v ${MAVEN_M2_PATH}:/root/.m2"
          }
        }
        steps {
            // 在镜像中执行的shell命令
            sh 'mvn -DskipTests clean package'
            // 将打包的好的jar文件临时存储起来,我们需要把这个jar文件移动到jdk容器中运行起来
            stash includes: 'target/*.jar', name: "${STASH_JAR}"
        }
    }

    // 构建部署镜像
    stage('Build docker image') {
        agent any

        steps {
            script {
                // 删除之前的镜像,${IMAGE_JAR_NAME}相同不会生成重复的image
                // sh "docker rmi ${IMAGE_JAR_NAME}"

                // 将打包的jar从临时存放的位置拿出来,这就转移到了宿主机中
                unstash "${STASH_JAR}"
                // ${JOB_NAME} -> github-jenkins-demo/master
                // 构建镜像
                def targetImage = docker.build("${IMAGE_JAR_NAME}", ' .')
            }
        }
    }

    // 运行容器
    stage('Deploy docker continer') {
        agent any

        steps {
            script {
                // 运行镜像容器,--rm表示容器kill后不保存,直接删除
                sh "docker run --rm ${IMAGE_JAR_NAME}"
            }
        }
    }
  }
}

然后commit

  1. 编写dockerfile
    因为我们需要构建部署的docker容器,所以需要实现编写一个dockerfile文件
    在项目根目录创建dockerfile文件
#install OS
#FROM centos
FROM openjdk:8
#install java
#RUN yum install -y java



#put jar into container
#ADD target/AdWordsProducer-1.0-SNAPSHOT-shaded.jar adwordsproducer.jar
ADD target/*-jar-with-dependencies.jar target.jar
#run jar

ENTRYPOINT ["java", "-jar", "/target.jar"]

  1. push本地项目到github
    push项目后,github因为配置了WebHook,所有会发送一个请求到jenkins,jenkins会根据我们编写的JenkinsFile进行自动化部署。


    image.png

    可以看到jenkins完全已经完成了自动化构建过程

  2. 手动触发构建
    有时候网络等原因可能会导致push代码后无法出发WebHook的自动构建,此时就需要手动拉去代码并进行自动话构建


    image.png

    点击该按钮后会手动进行构建

你可能感兴趣的:(jenkins+github自动部署)