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层Service层和Dao层的功能区分
java中Action层Service层和Dao层的功能区分
Java项目,bean类,dao包,service包,action包,现在想用action调用数据库中数据,数据在bean里有get set