简单高效的自动化部署:探索Jenkins神器,为小公司创造增长机会

84 阅读3分钟

1. 安装jenkins

官网提供了多种的安装方式,www.jenkins.io/download,这里我们选择war包的方式进行启动。

最新的版本是需要jdk11以上的,所以本文下载了历史的稳定版本,点击Past Releases,进入历史版本查看jdk8支持的版本。

这里下载2.346.1稳定版本,get.jenkins.io/war-stable/…

由于 jenkins是java写的,所以要跑它是需要java环境的,这里就不在描述java环境的安装,自行百度。

2. 启动jenkins

java -jar jenkins.war --httpPort=8080

可以看到日志里会有访问端口、初始化用户、密码

3. 登录jenkins

浏览器输入http://localhost:8080访问jenkins

如果选择 安装推荐插件,它会自动的下载 如下插件,等一会即可

安装完成之后,可以创建第一个管理用户或者继续使用admin,这里我是用test/12345678

至此,jenkins安装完成,可以愉快的使用jenkins的功能了。

4. jenkins的使用

4.1. 修改jenkin的工作目录

由于jenkins的默认工作目录是在c盘的,因此我们需要修改它为自定义的工作目录。找到./jenkins目录下的config.xml

这里可以看见他的工作目录是JENKINSHOME/workspace/{JENKINS_HOME}/workspace/{ITEM_FULL_NAME},根据环境变量来的,因此,我们需要配置JENKINS_HOME的环境变量

4.2. 配置全局管理工具

4.2.1. 安装所需要的插件
插件名称插件作用
Publish Over SSH连接ssh服务器
DingTalk整合钉钉机器认的插件
NodeJS Pluginnodejs的插件
Maven Integrationmaven风格的构建
Locale plugin汉化的插件
4.2.2. 配置maven的settings

默认的maven配置是只去apache官网拉取依赖,像有私服maven仓库,或者阿里云仓库,需要自定义maven的仓库,推荐使用自定义配置。

4.2.3. 配置jdk

jdk可以自动下载,如果本机已经有了可以自定义jdk路径,可以增加多个jdk版本的环境

4.2.4. 配置maven

maven可以自动下载,如果本机已经有了可以自定义maven路径,可以增加多个maven版本的环境

4.2.5. 配置服务器

配置需要部署服务器的账号密码

4.2.6. 中文汉化

在Default Language中设定“zh_CN”简体中文,"zh_TW"繁体中文。

注意:“Ignore browser preference and force this language to all users”必须选上。

4.3. 搭建一个简单的项目

4.3.1. 这里以xxx.xxx.xxx.xxx/xxx.git为例子,创建一个maven风格的项目

4.3.2. 编写项目描述,配置构建的丢弃时间,这里设置为最多保存五天,最多保存十条。

4.3.3. 设置项目需要的jdk,这里使用jdk1.8

4.3.4. 添加git的地址、账号密码、分支

4.3.5. 填写准备步骤,执行打包之前的操作命令

4.3.6. 填写打包的pom位置,填写打包的命令
package -Dmaven.test.skip=true

4.3.7. 填写打包完成之后的命令以及配置上传ssh服务器,并配置超时时间

查看远程的日志

4.3.8. 执行任务,进行构建

4.3.9. 执行的shell的脚本,这里使用的sed命令监听文件什么时候退出
appName=demo-0.0.1-SNAPSHOT.jar
appLog=demo-0.0.1-SNAPSHOT.log
javaPath=/soft/java/jdk1.8.0_221/bin/java
usage() {
    echo "Usage: sh $0 [start|stop|restart|status]"
}

is_exist() {
    pid=$(ps -ef | grep $appName | grep -v grep | grep -v $0 | awk '{print $2}')
    if [ -z "$pid" ]; then
        return 1
    else
        return 0
    fi
}

start() {
    is_exist
    if [ $? -eq "0" ]; then
        echo "$appName is already running, pid=$pid"
    else
        nohup ${javaPath} -jar ./${appName} > ${appLog} 2>&1 &
        sleep 2
        tail -f ${appLog} | sed '/(Started|Stopping)/q'
    fi
}

stop() {
    is_exist
    pidstatus=$?
    if [ $pidstatus -eq "0" ]; then
        kill $pid
    else
        echo "There is not the process of ${appName}"
    fi
    
    while [ $pidstatus -eq 0 ];do
        is_exist
        pidstatus=$?
        echo "$pid is running, wait for one second"
        sleep 1
    done
}


restart() {
    stop
    start
}


status() {
    is_exist
    if [ $? -eq "0" ]; then
        echo "$appName is running, pid=$pid"
    else
        echo "There is not the process of ${appName}"
    fi
}

case $1 in
    "start")
        start
        ;;
    "stop")
        stop
        ;;
    "restart")
        restart
        ;;
    "status")
        status
        ;;
    *)
        usage
        ;;
esac
exit 0