美文网首页
基于Jenkins流水线自动生成代码部署

基于Jenkins流水线自动生成代码部署

作者: 庆余年_21d6 | 来源:发表于2018-12-13 14:09 被阅读0次

1. 建立Jenkins流水线

1.1 登录Jenkins 选择新建任务


image.png

1.2 输入任务名称application-freeMakers和选择流水线项目,点击确定


image.png

1.3 勾选参数化构建过程,点击添加参数,选择文本参数,输入名称applicationName。


image.png

2. 脚本编写准备

2.1 登录gitlab
2.2 点击个人设置

image.png
2.3 选择访问令牌,填写生成token信息,name为apps,终止日期可不选择,默认为永久,勾选API,read_user,read_registry,read_repository,然后点击创建token。
image.png
2.4 拷贝生成的token,此token只生成一次
image.png

3.编写代码生成器方法

3.1 新建maven项目

import freemarker.template.Configuration;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Template;

/**
 * @Copyright: Shanghai Definesys Company.All rights reserved.
 * @Description:
 * @author: bingcun.yao
 * @since: 2018/12/12 15:14
 * @history: 1.2018/12/12 created by bingcun.yao
 */
public class FreeMarkerDemo {

    public static void main(String[] args){
        // step1 创建freeMarker配置实例
        Configuration configuration = new Configuration();
        Writer out = null;
        String TEMPLATE_PATH=args[0];
        String TEMPLATE_NAME=args[1];
        //String TEMPLATE_PATH="E:\\txtdown";
        try {
             // step2 获取模版路径
            configuration.setDirectoryForTemplateLoading(new File(TEMPLATE_PATH));
            // step3 创建数据模型
            Map<String, Object> dataMap = new HashMap<String, Object>();
            dataMap.put("classPath", "com.ybc.hello");
            dataMap.put("className", "AutoCodeDemo");
            dataMap.put("helloWorld", "通过简单的 <代码自动生产程序> 演示 FreeMarker的HelloWorld!");
            // step4 加载模版文件
            Template template = configuration.getTemplate("hello.ftl");
            // step5 生成数据
            File docFile = new File(TEMPLATE_PATH + "/"+TEMPLATE_NAME+ "/" + "AutoCodeDemo.java");
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
            // step6 输出文件
            template.process(dataMap, out);
            System.out.println("AutoCodeDemo.java 文件创建成功 !");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != out) {
                    out.flush();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
}


3.2 将项目生成jar包,并和代码生成器模板zip包上传到gitlab空项目上


image.png

3.3 拷贝2个文件的下载地址


image.png

4. 编写脚本

4.1

node {
   def header = "PRIVATE-TOKEN:zdkvgj5hfmQGdzzJ8kKj"
   def data = "name=${applicationName}"
   def name ="bingcun.yao"
   def email = "bingcun.yao@definesys.com"
   
   stage('Preparation') { 
      sh "curl -i -X POST -H '${header}'  -d '${data}'  http://git.definesys.com/api/v4/projects "
   }
   
    stage('makerCode') { 
        sh "mkdir /var/lib/jenkins/${applicationName} \n cd /var/lib/jenkins/${applicationName} \n git config --global user.name '${name}' \n   git config --global user.email '${email}' \n git config --list \n git clone http://bingcun.yao%40definesys.com:ybc45882@git.definesys.com/ybc/${applicationName}.git  "
        sh "cd /var/lib/jenkins/${applicationName} \n ls \n  wget http://git.definesys.com/definesys/sword-plugin-daily/raw/master/freemarkerdemo.jar \n wget http://git.definesys.com/definesys/sword-plugin-daily/raw/master/hello.zip "
        sh "cd /var/lib/jenkins/${applicationName} \n unzip /var/lib/jenkins/${applicationName}/hello.zip "
        sh "cd /var/lib/jenkins/${applicationName} \n java -jar freemarkerdemo.jar '/var/lib/jenkins/${applicationName}' '${applicationName}' "
    }
    stage('makerCode') { 
    sh "cd /var/lib/jenkins/${applicationName}/${applicationName} \n  git add . \n git commit -m 'message' \n git push -u origin master"
    
    }
}

4.2 将脚本写入Pipeline script,点击应用保存。


image.png

4.3 点击Build with Parameters


image.png
image.png

4.4 等待运行成功


image.png
4.5 打开gitlab查看运行结果
image.png
image.png

相关文章

网友评论

      本文标题:基于Jenkins流水线自动生成代码部署

      本文链接:https://www.haomeiwen.com/subject/nvbvhqtx.html