# 安装

操作系统 ubuntu 18

  • java安装
sudo add-apt-repository ppa:openjdk-r/ppa
# 需要回车一下
sudo apt-get update
echo y|sudo apt-get install openjdk-8-jdk

1
2
3
4
5
  • Jenkins 安装(这里安装的是服务版本的,可以选择安装docker版本,但是docker版本使用pipline时,用shell语言传输项目包会遇到很多权限等问题)
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
echo y|sudo apt-get install jenkins
1
2
3
4
  • 安装完毕,相关启动命令,及目录:
sudo service jenkins start|stop|restart

/var/lib/jenkins # jenkins 内容目录 workspace
/var/lib/jenkins/.m2 # maven包放置目录

/etc/default/jenkins # jenkins 配置文件 修改端口

/usr/share/jenkins # jenkins war包放置目录
1
2
3
4
5
6
7
8
  • 修改jenkins启动端口

    1. 修改/etc/init.d/jenkins jenkins开机启动脚本,修改do_start函数的check_tcp_port命令,端口号从8080换成8082
    2. 修改/etc/default/jenkins 文件,修改:HTTP_PORT=8082
  • 设置jenkins

    1. 此时打开对应端口网站:ip:8082,初始化时要求输入密码,密码为:/var/lib/jenkins/secrets/initialAdminPassword
    2. 使用推荐配置,等待安装插件完毕
    3. 设置用户,进入首页,tips:如果首页进入空白,则输入网址跳转到:ip:8082/pluginManager/advanced,修改:升级站点内容,的https->http,然后重启jenkins即可
  • 插件安装,本文安装了 blue ocean, nodejs, publish over ssh 三个插件,如果要部署maven项目可以安装maven插件

    1. blue ocean:可视化构建流程
    2. nodejs: 编译nodejs 项目
    3. publish over ssh: 编译完成后,传输到目标服务器
  • github配置

    1. github setting->developer settings->personal access tokens,新建一个access token

    2. jenkins 系统管理,添加github服务器

      image7ff5ffe40ec7192a.png

      密钥添加类型为 secret key,secret为上一步骤的access token

      image81f44369e7a63f9a.png

    3. 设置github hook,找到对应的项目,setting->webhoosks->add webhook,之后接可以在每次提交代码后,github通知jenkins自动拉取代码,并自动构建

      imagee67a2b274f6055f2.png

# 开始使用
  • 新建任任务,构建一个自由风格的软件项目

    image14d3545f64cd9572.png

  • 进入页面,源码管理,选git ,输入仓库地址,并添加密钥,密钥类型选择username and password即可

    image1eadbd538c50d3ae.png

  • 配置构建触发,和构建环境。这里构建的是vue项目,所以选择了node环境(需要安装nodejs插件)。

    image106ce49d5c9702c8.png

  • 构建步骤,选择执行shell 及send file or excute commands over ssh。第一步为通过插件构建项目,并打包。第二步为传输到目标服务器,ssh server可以通过系统管理中添加ssh server实现。这边时传输到windows 服务器,windows服务器开启sftp传输需要依赖第三方软件,本文用的是powershell server 2016,具体使用方法参考 (opens new window)

    imageaa96d92508b6a834.png

image5ba97e4a59dbf7cf.png

  • 保存即可,此时如果本地提交代码,jenkins就可以自动拉取到代码,并自动打包传输到目标服务器。

  • Pipeline使用,pipeline为自定义脚本控制部署流程,具体参考官网 (opens new window),需要在项目根目录下新建Jenkinsfile文件,示例如下:

    pipeline {
        agent any
        stages {
            stage('Test') {
                    steps {
                        echo 'test'
                        sh 'mvn -version'
                    }
             }
             stage('Build') {
                     steps {
                        sh 'mvn -B -DskipTests clean package'
                     }
             }
             stage('deliver') {
                          steps {
                             sh './jenkins/test.sh'
                                }
                      }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    可以自定义配置步骤,并调用脚本。

    jenkins配置示例:

    image404a5bc7631b92ae.png

    可以通过流水线语法,来生成pipeline代码。

# 附:
  • Windows 下操作脚本

    ::从sftproot里拷贝传输的压缩包 至temp文件夹(覆盖)
    copy C:\"Program Files"\nsoftware\"PowerShell Server 2016"\sftproot\front.zip D:\edu\deploy_backup\temp /y
    ::将test环境压缩至备份文件夹
    7z a  D:\edu\deploy_backup\zhxy%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2%.zip D:\edu\zhxy_front_test\**
    :: 删除test环境文件夹下内容
    rmdir /s/q D:\edu\zhxy_front_test\static
    del D:\edu\zhxy_front_test\static\index.html
    
    ::解压temp文件,解压后有dist目录
    7z x D:\edu\deploy_backup\temp\front.zip -oD:\edu\deploy_backup\temp
    
    :: 拷贝dist文件夹下所有内容到测试环境
    xcopy D:\edu\deploy_backup\temp\dist D:\edu\zhxy_front_test /e /y
    
    :: 删除dist文件夹
    rmdir /s/q D:\edu\deploy_backup\temp\dist
    :: 删除传输过来的打包文件
    del  C:\"Program Files"\nsoftware\"PowerShell Server 2016"\sftproot\front.zip
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  • Linux shell 脚本

    #!/usr/bin/env bash
    # 部署到docker
    PROJECT=generator
    WAR=$WORKSPACE/target/$PROJECT-0.0.1-SNAPSHOT.war
    
    echo "待发布的 war 包:filepath=$WAR"
    
    
    rm -rf /home/docker/tomcat/webapps/$PROJECT
    
    
    unzip $WAR -d /home/docker/tomcat/webapps/$PROJECT
    
    docker container restart tomcattest
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/sh
    # 远程部署,需要配置ssh免密登录
    # author: zhuang1994@foxmail.com
    # description: 自动部署war包到指定的内网docker服务器
    # 1. mvn编译打包(jenkins完成)
    # 2. scp到目标内网服务器, 并解压到指定目录
    # 3. 重启docker tomcat容器
    
    
    # 1
    PROJECT=generator
    HOST=192.168.0.1
    WAR=$WORKSPACE/target/$PROJECT-0.0.1-SNAPSHOT.war
    
    if [ ! -f "$WAR" ]; then
        echo "待发布的 war 包不存在:filepath=$WAR"
        exit 1
    fi
    echo "...............path:$WAR"
    echo "...............host:$HOST"
    # 3 scp war files
    echo "...............scp:$WAR root@$HOST:/tmp"
    scp $WAR root@$HOST:/tmp
    echo ".................... scp war files: $WORKSPACE/target/$PROJECT-0.0.1-SNAPSHOT.war "
    
    # 4.docker container restart
    ssh -tt root@$HOST <<EOF
        docker container stop tomcattest
    
        rm -rf /home/docker/tomcat/webapps/$PROJECT
    
        unzip /tmp/$PROJECT-0.0.1-SNAPSHOT.war -d /home/docker/tomcat/webapps/$PROJECT
    
        docker container start tomcattest
    
        exit
    EOF
    
    echo ".................... docker container restart tomcattest "
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
Last Updated: 4/8/2024, 3:34:45 AM