CI/CD1jenkins,actions,daocloud

Posted 码农编程录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI/CD1jenkins,actions,daocloud相关的知识,希望对你有一定的参考价值。


1.jenkins

如下构建/测试/部署就是CICD工具即jenkins,但jenkins需要个人提供一台运行jenkins的机器。

官网https://www.jenkins.io/下载jenkins,可选择适合你自己系统的版本,也可选择不依赖于系统的docker(前提本机安装了docker)或war包(本机安装了java)。

执行如上命令出现如下密码,复制这串密码,浏览器打开http://localhost:8080,粘贴到管理员密码里。点击安装推荐插件,创建管理员用户yuta,密码123,到这里jenkins已经安装完成了(装在win上),主要用来配合git服务器。

Manage Jenkins中选择Global Tool Configuration添加git路径如下。

Create a job,选择Freestyle project,命名为newjob,点击配置如下。






如上如果选择execute shell会出现系统找不到指定文件报错。liunx 下使用execute shell,并加上#!/bin/bash,cat ./README.md。这里的脚本可以做的事很多,比如构建项目,做代码测试等。如下可以查看fetch拉取github代码并执行cat ./README.md脚本。


2.github新功能actions

Actions替代了travis,完成github上的cicd的操作,如下点击Actions后选择自定义流程。

如上点击后产生如下main.yml文件。

如上点击提交代码后,Actions其实正在运行了。

如下是.yml文件怎么写。

name:流程命名为。
on:[push] push代码时会触发。如下是src下文件发生改动的主分支下提交的代码才会触发当前的流程。

如下是每15分钟执行一次当前流程,有schedule就不能写push事件了。

具体触发的任务在jobs下,job1是命名。

runs-on是枚举类型,必须写如下8种。

如下actions是github上有一官方用户叫actions,有一个仓库叫checkout,这仓库里面流程就是把代码下载下来。uses参数后面写另一个代码仓库。run参数后面写shell。

默认是ubuntu系统,怎么去拿到其他的环境。

timeout-minutes默认30分钟超时时间,指定超时时间如1分钟,1分钟内没有执行完会强制结束。

如下是ubuntu默认安装好的。

2.1 container

如下指定node8这个容器container下,显示8.xx。uses使用docker只是docker run在旁边运行了一个docker并不影响实际run的一些脚本。

2.2 services


如下nginx容器在当前ubuntu-latest环境下启动起来了。

2.3 Secrets

如果执行流程中有涉及到一些密码或敏感信息时,可在github中Settings中添加Secrets


开源项目的actions日志可以被看到,所以如下日志打印*,但是变量已经写进去了,比如登录其他网站用到密码时候,在这个脚本中其实是可用的。

3.daocloud

官网:https://www.daocloud.io/,用关联github登录。如下生成springboot项目的网站:https://start.spring.io/。选择如下:

如下只添加web依赖即可。

如上项目生成压缩包,剪切到桌面进行解压,并用idea打开,并点击idea中提示的Enable Auto-import。如下DaocloudApplication.java是默认有的,MyController.java和MySrc.java是自己添加的。

//MySvc.java
package com.example.daocloud;
import org.springframework.stereotype.Service;

@Service
public class MySvc {
    public int add(int a,int b){
        return a+b;
    }
}
//MyController.java
package com.example.daocloud;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class MyController {
    @Autowired
    MySvc mySvc;
    @GetMapping("/")
    public String index(){
        return "hello spring boot";   //首页
    }
    @GetMapping("/add")
    public String add(int a, int b ){
        return mySvc.add(a,b)+"";  //最后加双引号是将数字变为字符串
    }
}


如上运行后,浏览器输入如下。

如下测一下接口。

如上就是两个http接口(/,/add)和一个服务接口(DaocloudApplication.java),如下添加测试接口在test文件夹下。

package com.example.daocloud;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DaocloudApplicationTests {
	@Autowired
	MySvc mySvc;  //对服务进行测试,只要测试mySvc
	@Test
	public void addTest() { //测试用例
		int res = mySvc.add(772,119);
		assert  res == 891;
	}
	@Test
	public void addTest2() {
		int res = mySvc.add(556,119);
		assert  res == 675;
	}
}

在GitHub上创建空的名为daocloud的仓库。

如下在daocloud官网中创建项目,关联github上项目,点击开始创建后就进入cicd的配置流程,点击前往流程定义。

3.1 测试

点击如上的开始创建后就进入cicd的配置流程了:点击如下测试任务,里面写mvn test。这个测试阶段不通过,不会到构建阶段,构建阶段主要目的是想要将项目生成docker镜像以便于后面的部署。

mvn test这个测试任务是在云端自动帮我们完成,云端并没有安装maven,云端是基于docker镜像的,改为如下。

3.2 构建

点击默认构建任务,在项目中直接创建Dockerfile文件即本地创建Dockerfile如下。在idea控制台运行如下第4行会在target文件夹下生成jar包,后面会将这个jar包拷贝到java 8 镜像的根目录下重命名为app.jar,最后CMD是启动指令。

FROM maven:3 AS bd
WORKDIR /code
COPY ./ /code
RUN mvn package -Dmaven.test.skip=true

FROM java:8
COPY --from=bd /code/target/*.jar /app.jar
CMD java -jar /app.jar

在idea控制台中重新add,commit,push更新远程代码。再回到如下构建任务页面。

如下返回流程定义页面,点击如下手动触发。

如下可以点进去查看。

如下先将项目代码拷贝到云端的一台机器上,加载了自己的默认配置文件,拉取了在测试时配置好的maven3镜像,真正运行配置了mvn test(下载了springboot依赖,时间长)。

如下镜像构建完后,需要上传到daocloud的官方仓库上。


点击如下镜像。

如下设为公开,docker pull就不用进行登录。

如下解决上面的不自动化,点击导入主机,添加新主机。

如下可以运行虚拟机里的系统,用crt连接虚拟机里系统,输入下面脚本。

点击如上查看主机出现如下。

3.3 发布

如下在流程定义中添加发布阶段。


应用就是将镜像部署到自由主机上。点击左侧应用中 - 创建应用 - 部署最新版本。


如上点击立即部署,开启了tomcat服务。


如下创建子网穿透。



回到项目中点击添加发布任务,发布到自由主机。

修改了idea中代码并重新add,commit,push,通过提交代码方式重新触发了流程。

总结:本地修改代码 == 推送托管仓库 == DaoCloud 监听仓库变化,拉取最新代码 == 执行 CI:添加依赖,代码测试,将代码打包入docker并重新构建镜像 == 执行 CD:生产机监听 DaoCloud 变化,拉取镜像并构建容器。

以上是关于CI/CD1jenkins,actions,daocloud的主要内容,如果未能解决你的问题,请参考以下文章

java中的action是啥,DAO又是啥?

简述Action+Service +Dao 功能

java中Action层Service层和Dao层的功能区分

java中Action层Service层和Dao层的功能区分

Action+Service +Dao三层的功能划分

Java项目,bean类,dao包,service包,action包,现在想用action调用数据库中数据,数据在bean里有get set