精华内容
下载资源
问答
  • IP切换软件

    2012-09-03 15:55:10
    [一话] 一键切换网络 [系统支持] Window2000/XP/2003/Vista/2008, 98也可以支持,但不予支持,BS不稳定的98 [界面语言] 简体中文(为人民服务),繁体中文(单独提供!),英文(单独提供!) [网卡] 精确检测及识别...
  • Bean的自动化装配

    2018-01-15 10:14:26
    今天我们来总结一下bean的装配问题,一个软件需要不同功能的类之间建立合作,才能是组装成一个强大的系统,spring在其中就是一个调度者的角色,总结一话就是:我知道你需要什么,我提供给你需要的,而你只需要大脑...
    前言


    今天我们来总结一下bean的装配问题,一个软件需要不同功能的类之间建立合作,才能是组装成一个强大的系统,spring在其中就是一个调度者的角色,总结一句话就是:我知道你需要什么,我提供给你需要的,而你只需要大脑空空就可以了,专注于你要完成的业务逻辑就好了,别的事情交给我来做。

    有没有被spring感动到,比如一台电脑,他包含了许多组件,cup知道他需要一个硬盘吗?不知道吧,这需要工人给他组装到一起,拿到手上的就是所有配件齐全的一台机器,而spring就是这个组装工人

    装配


    创建应用对象之间协作关系的行为通常称为装配(wiring),这也是DI(依赖注入)的本质

    三种配置方式:

    1. 在XML中进行显示配置
    2. 在JAVA中进行显示配置
    3. 隐式的bean发现机制和自动装配

    自动化装配bean

    • 组件扫描:Spring会自动发现应用上下文中所创建的bean
    • 自动装配:Spring自动满足bean之间的依赖
    实例:(取自《spring实战》)


    这个小例子以cd机为原型,cd机如果没有加入唱片,那么他也没有用处,所以这里的依赖关系就是cd机要依赖唱片才能播放

    一、创建唱片

    public interface CompactDisc {
        void play();
    }

    值得思考的编码哲学:将唱片定义为一个接口,他定义了cd机对一盘唱片所能进行的操作,他将cd机的任意实现与CD本身的耦合降低到了最小的程度

    二、唱片的实现

    @Component
    public class SgtPeppers implements CompactDisc {
    
        //beatles1967年发行的专辑
        private String title="Sgt.Perpper's Lonely Hearts Club Band";
        private String artist="The Beatles";
    
        public void play() {
            System.out.println("Playing "+title+" by "+artist);
        }
    
    }

    p.s. @Component、@Repository、@Service 和@Controller的区别

    • @Service用于标注业务层组件
    • @Controller用于标注控制层组件(如struts中的action)
    • @Repository用于标注数据访问组件,即DAO组件
    • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    他们都是元注解,用于标注其他注解,在这里的作用:标注在某个类上,此类就会自动的被Spring容器注册为BeanDefinition(扫描包的时候,如果有以上四个注解,则将此类管理到spring容器中)

    三、配置spring

    组件扫描默认是不启动的,需要显示配置一下Spring,有两种方式进行配置,一种是使用Java代码定义Spring的装配规则,第二种是使用xml配置文件

    方法一:

    @Configuration
    @ComponentScan
    public class CDPlayerConfig {
    }

    带有@Configuration注解,说明这个类是一个配置类,而@ComponentScan默认会扫描会配置类相同的包

    测试方法:

    //在测试开始的时候自动创建Spring的应用上下文
    @RunWith(SpringJUnit4ClassRunner.class)
    //会告诉他需要在CDPlayerConfig中加载配置。因为CDPlayerConfig包含了@ComponentScan,最终的应用上下文中应该包含CompactDisc bean
    @ContextConfiguration(classes=CDPlayerConfig.class)
    public class CDPlayerTest {
        @Autowired
        private CompactDisc cd;
    
        @Test
        public void cdShouldNotBeNull(){
            assertNotNull(cd);
        }
    
    }

    方法二:
    在xml文件中配置包扫描器

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
        <!-- 配置包扫描器 -->
        <context:component-scan base-package="soundsystem"/>
    </beans>

    测试方法:

    第二种测试方法:(配置文件)
    
    public class CDPlayerTest {
        @Autowired
        private CompactDisc cd;
    
        @Test
        public void cdShouldNotBeNull(){
            ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
            context.start();
            cd=(CompactDisc) context.getBean("lonelyHeartsClub");
            assertNotNull(cd);
        }
    
    }
    总结


    今天简单的了解了一些spring的装配的最基本的应用,这只是最简单的一个实例,业务复杂的时候就会出现各种各样的其他场景,spring的强大才会慢慢体现出来

    展开全文
  • 芭奇站群管理软件自动采集,自动发布,各种伪原创,站长APP接口等等SEO功能为一体,软件功能强大,支持关键词采集 文章采集,图片和视频采集,也支持自定义采集规则指定域名采集,也提供有超强的原创文章...
  • 发布一个长尾词生成的小软件工具

    千次阅读 2014-08-31 15:59:20
    我们经常会通过不同的词进行组合来生成长尾词,比如“海尔和春兰的洗衣机哪个好?”这个话实际上是:...这个小软件就是可以把各种词元素组自动组合成各种长尾词。 介绍一下如何操作:先把不同类别的词元素放在不

    我们经常会通过不同的词进行组合来生成长尾词,比如“海尔和春兰的洗衣机哪个好?”这个句话实际上是:“品牌词”和“品牌词”“判断词”。那么我们可以用一些列的词作为品牌词,比如“海尔、春兰、博世、科龙、格力...",判断词可以用”哪个好、相比怎么样、哪个便宜...“等等,这样就可以组合出大量长尾词。这个小软件就是可以把各种词元素组自动组合成各种长尾词。

    介绍一下如何操作:先把不同类别的词元素放在不同的文本文件里,一个词一行。有多少个类别就有多少个文件,比如说品牌词1放在”ppc1.txt"里,品牌词2放在"ppc2.txt"里,判断此放在文件"pdc.txt“里。

    zhcwc3   zhcwc1-1

    zhcwc2

    zhcwc1

     

    然后按照你想组合的顺序,通过点击“1、加入词元素文件”,依次加入这些文件。

    zhcwc4

     

    zhcwc5

    然后点击“生成长尾词”,让软件自动生成,生成完毕后,就可以在右边的文本框里看到已经组合好的长尾词了。

    zhcwc6

     

    zhcwc7

    如果想把这些词保存到文件或者别的地方,可以点击“拷贝到剪贴板”,这样就可以拷贝出来。如果还需要生成别的词,点击“清除词元素文件”,又可以重新开始。

    这里可以下载,完全免费哦!

    链接: http://pan.baidu.com/s/11u6hK 密码: e6e4

    展开全文
  • 库存中包含免费项目,软件和支持。 当天发货。 访问进行订购 产品概要: 如果您正在寻找购买和生产之间的最短距离,这就是Maslow套件。 根据与Maslow CNC的协议,该套件由MakerMade CNC制造。 您的订单将随附所有...
  • 内部还可以分子)。另外还有一个非常重要的特性,就是每个分组都可以进行预处理(<code>before、<code>beforeEach</code>)和后处理(<code>after, <code>afterEach</code>)...
  • 7,智能分句,自动复读:电脑程序自动智能分析,判断读分界,自动逐句复读,强化训练,可任意指定每复读次数和复读间隔时间,远非普通复读机可以办到。 8,多级变速,快慢自如:极大方便不同需要的使用者对播放...
  • 代码下载网页,一代码自动发贴,一代码批量处理文件,一代码完成工作。小到桌面自动化,大到价值数千的大型群发软件。大量的成功案例无不体现出模拟精灵卓越的创造能力。 第一天玩玩模拟精灵 ----- ...
  • 软件采集到最新相关内容,并自动SEO发布到指定网站的多任务站群管理系统,可24小时不间断的全自动维护数百个网站。其核心价值在于全自动按SEO优化规则建站,无需任何技术门槛,为客户创造网站价值。系统能根据设置的...
  • gitea+drone+kubernetes搭建devops平台

    千次阅读 2020-01-07 18:12:12
    **DevOps** 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试...

    gitea+drone+kubernetes搭建devops平台

    DevOps基本介绍

    DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和运维。换句话 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。

    关于devops的基础概念可以参考关于DevOps落地方案的个人观点了解,一般来说一次版本发布包含如下Checklist:

    • 代码的下载构建及编译
    • 运行单元测试,生成单元测试报告及覆盖率报告等
    • 在测试环境对当前版本进行测试
    • 为待发布的代码打上版本号
    • 编写 ChangeLog 说明当前版本所涉及的修改
    • 构建 Docker 镜像
    • 将 Docker 镜像推送到镜像仓库
    • 在预发布环境测试当前版本
    • 正式发布到生产环境

    单人开发模式

    • clone 项目到本地, 修改项目代码, 如将 Hello World 改为 Hello World V2。
    • git add .,然后书写符合约定的 commit 并提交代码, git commit -m "feature: hello world v2”
    • 推送代码到代码库git push,等待数分钟后,开发人员会看到单元测试结果,gitea 仓库会产生一次新版本的 release,release 内容为当前版本的 changeLog, 同时线上已经完成了新功能的发布。

    虽然在开发者看来,一次发布简单到只需 3 个指令,但背后经过了如下的若干次交互,这是一次发布实际产生交互的时序图,具体每个环节如何工作将在后面中详细说明。

    多人开发模式:

    • Clone 项目到本地,创建一个分支来完成新功能的开发, git checkout -b feature/hello-world-v3。在这个分支修改一些代码,比如将Hello World V2修改为Hello World V3
    • git add .,书写符合规范的 Commit 并提交代码, git commit -m "feature: hello world v3”
    • 将代码推送到代码库的对应分支, git push origin feature/hello-world
    • 如果功能已经开发完毕,可以向 Master 分支发起一个 Pull Request,并让项目的负责人 Code Review
    • Review 通过后,项目负责人将分支合并入主干,Github 仓库会产生一次新版本的 release,同时线上已经完成了新功能的发布。

    这个流程相比单人开发来多了 2 个环节,很适用于小团队合作,不仅强制加入了 Code Review 把控代码质量,同时也避免新人的不规范行为对发布带来影响。实际项目中,可以在 Gitea 的设置界面对 master 分支设置写入保护,这样就从根本上杜绝了误操作的可能。当然如果团队中都是熟手,就无需如此谨慎,每个人都可以负责 PR 的合并,从而进一步提升效率。

    GitFlow 开发模式:

    在更大的项目中,参与的角色更多,一般会有开发、测试、运维几种角色的划分;还会划分出开发环境、测试环境、预发布环境、生产环境等用于代码的验证和测试;同时还会有多个功能会在同一时间并行开发。可想而知 CI 的流程也会进一步复杂。

    能比较好应对这种复杂性的,首选 GitFlow 工作流, 即通过并行两个长期分支的方式规范代码的提交。而如果使用了 Gitea,由于有非常好用的 Pull Request 功能,可以将 GitFlow 进行一定程度的简化,最终有这样的工作流:

    这个模式主要遵循以下约定

    • 以 dev 为主开发分支,master 为发布分支
    • 开发人员始终从 dev 创建自己的分支,如 feature-a
    • feature-a 开发完毕后创建 PR 到 dev 分支,并进行 code review
    • review 后 feature-a 的新功能被合并入 dev,如有多个并行功能亦然
    • 待当前开发周期内所有功能都合并入 dev 后,从 dev 创建 PR 到 master
    • dev 合并入 master,并创建一个新的 release

    上述是从 Git 分支角度看代码仓库发生的变化,实际在开发人员视角里,工作流程是怎样的呢。假设我是项目的一名开发人员,今天开始一期新功能的开发:

    1. Clone 项目到本地,git checkout dev。从 dev 创建一个分支来完成新功能的开发, git checkout -b feature/feature-a。在这个分支修改一些代码,比如将Hello World V3修改为Hello World Feature A
    2. git add .,书写符合规范的 Commit 并提交代码, git commit -m “feature: hello world feature A”
    3. 将代码推送到代码库的对应分支, git push origin feature/feature-a:feature/feature-a
    4. 由于分支是以feature/命名的,因此 CI 会运行单元测试,并自动构建一个当前分支的镜像,发布到测试环境,并自动配置一个当前分支的域名如 test-featue-a.avnpc.com
    5. 联系产品及测试同学在测试环境验证并完善新功能
    6. 功能通过验收后发起 PR 到 dev 分支,由 Leader 进行 code review
    7. Code Review 通过后,Leader 合并当前 PR,此时 CI 会运行单元测试,构建镜像,并发布到测试环境
    8. 此时 dev 分支有可能已经积累了若干个功能,可以访问测试环境对应 dev 分支的域名,如 test.avnpc.com,进行集成测试。
    9. 集成测试完成后,由运维同学从 Dev 发起一个 PR 到 Master 分支,此时会 CI 会运行单元测试,构建镜像,并发布到预发布环境
    10. 测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作
    11. 运维同学合并 PR,CI 将为本次发布的代码及镜像自动打上版本号并书写 ChangeLog,同时发布到生产环境。

    由此就完成了上文中 Checklist 所需的所有工作。虽然描述起来看似冗长,但不难发现实际作为开发人员,并没有任何复杂的操作,流程化的部分全部由 CI 完成,开发人员只需要关注自己的核心任务:按照工作流规范,写好代码,写好 Commit,提交代码即可。

    总结

    • 如果搭建了Gerrit服务,可以使用Gerrit作为ReviewCode的中间代码仓库
    • golang静态分析工具有sonarqube和golangci-lint等,运行静态分析可以保证代码没有明显的错误。

    使用docker-compose实现CI

    具体的代码库可以访问drone_gitea_devops仓库查看,这部分只实现了持续集成,并未实现持续发布和持续部署。

    代码管理

    git基本使用

    详情访问赵布的学习笔记-Git的使用查看

    gitea部署代码仓库

    采用如下docker-compose部署:

    version: "3.7"
    
    networks:
      dronenet:
        name: dronenet
    services:
      # 使用nginx做反向代理
      # nginx:
      #   image: nginx:alpine
      #   container_name: drone_nginx
      #   ports:
      #     - "8080:80"
      #   restart: always
      #   networks:
      #     - dronenet
      #   volumes:
      #     - ./nginx/conf:/etc/nginx/conf.d:rw
      #     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      #     - ./nginx/hosts:/etc/hosts:rw
    
      # gitea 服务
      gitea_server:
        image: gitea/gitea:latest
        ports:
          - 3000:3000
          # 必须映射22端口,不然只能使用http cloen仓库
          - "3022:22"
        volumes:
          - ./gitea_server/data:/data
          - ./gitea_server/conf/app.ini:/data/gitea/conf/app.ini
        restart: always
        container_name: gitea_server
        environment:
          - USER_UID=1000
          - USER_GID=1000
          - HTTP_PORT=3000
          - DB_TYPE=postgres
          - DB_HOST=gitea_postgres:5432
          - DB_USER=${POSTGRES_USER}
          - DB_NAME=${POSTGRES_DB}
          - DB_PASSWD={POSTGRES_PASSWORD}
          - APP_NAME="DROG (gitea + drone) test"
          # this exposes to end users
          - ROOT_URL=http://${HOST}:3000
        networks:
          dronenet:
    
      # gitea 可以用postgres也可以用mysql
      gitea_postgres:
        image: postgres:alpine
        # ports:
        #   - 5432:5432
        restart: always
        container_name: gitea_postgres
        volumes:
          - ./gitea_postgres/data:/var/lib/postgresql/data
        environment:
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - POSTGRES_DB=${POSTGRES_DB}
        networks:
          dronenet:
    

    gitea部署需要注意点:

    • gitea可以使用postgress也可使用mysql,但是mysql在映射volume时如果想映射到当前目录,会出现读写问题,具体的问题,可以试一下就会明白
    • ports端口映射时需要映射两个端口,一个是默认的3000,可以使用http/https协议进行git clone,还有需要映射内部的22端口,才能使用git协议

    创建drone使用的token

    访问http://192.168.0.90:3000/登录gitea,点击个人信息,应用,然后新建一个oAuth2应用程序,名称随便填,重定向url填http://192.168.0.90:8080/login

    然后记录下客户端id,客户端密匙

    修改.env文件中的

    DRONE_GITEA_CLIENT_ID=dd94066a-df64-4d0c-b49c-e4c2d50bb025
    DRONE_GITEA_CLIENT_SECRET=ZmYdYjtaLYLF8fiGYMCBistpQeHuxtyDdQgo3A5dnlY=

    然后启动drone容器

    Harbor镜像仓库

    在drone的pipline中build完镜像后需要提交镜像到images仓库。在持续发布和持续部署阶段需要用到

    按照docker-compose-manager仓库里面的harbor目录里的docker-compose启动Harbor镜像仓库,访问http://192.168.0.90:8180/登录harbor,并且记录用户名和密码

    使用Drone实现CI

    启动Drone容器

    version: "3.7"
    
    networks:
      dronenet:
        name: dronenet
    # volumes:
    #   portainerdata:
    #     name: portainerdata
    
    services:
      # 使用nginx做反向代理
      # nginx:
      #   image: nginx:alpine
      #   container_name: drone_nginx
      #   ports:
      #     - "8080:80"
      #   restart: always
      #   networks:
      #     - dronenet
      #   volumes:
      #     - ./nginx/conf:/etc/nginx/conf.d:rw
      #     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      #     - ./nginx/hosts:/etc/hosts:rw
    
      # gitea 服务
      gitea_server:
        image: gitea/gitea:latest
        ports:
          - 3000:3000
          # 必须映射22端口,不然只能使用http cloen仓库
          - "3022:22"
        volumes:
          - ./gitea_server/data:/data
          - ./gitea_server/conf/app.ini:/data/gitea/conf/app.ini
        restart: always
        container_name: gitea_server
        environment:
          - USER_UID=1000
          - USER_GID=1000
          - HTTP_PORT=3000
          - DB_TYPE=postgres
          - DB_HOST=gitea_postgres:5432
          - DB_USER=${POSTGRES_USER}
          - DB_NAME=${POSTGRES_DB}
          - DB_PASSWD={POSTGRES_PASSWORD}
          - APP_NAME="DROG (gitea + drone) test"
          # this exposes to end users
          - ROOT_URL=http://${HOST}:3000
        networks:
          dronenet:
    
      # gitea 可以用postgres也可以用mysql
      gitea_postgres:
        image: postgres:alpine
        # ports:
        #   - 5432:5432
        restart: always
        container_name: gitea_postgres
        volumes:
          - ./gitea_postgres/data:/var/lib/postgresql/data
        environment:
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - POSTGRES_DB=${POSTGRES_DB}
        networks:
          dronenet:
    
      # drone使用mysql
      drone_mysql:
        image: mysql
        restart: always
        container_name: drone_mysql
        # ports:
        #   - 3306:3306
        environment:
          - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
          - MYSQL_DATABASE=${MYSQL_DATABASE}
          - MYSQL_USER=${MYSQL_USER}
          - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        networks:
          dronenet:
        volumes:
          - ./drone_mysql/conf/my.cnf:/etc/mysql/my.cnf:rw
          - ./drone_mysql/data:/var/lib/mysql/:rw
          - ./drone_mysql/logs:/var/log/mysql/:rw
    
      # drone 服务端
      drone_server:
        image: drone/drone
        container_name: drone_server
        ports:
          - 8080:80 # drone comtainer serves via port 80, we expose to end users via port 8381
          # - 8443:443
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - ./drone_server/data:/data:rw
          - ./drone_server/drone:/var/lib/drone:rw
        restart: always
        environment:
          # db Config
          - DRONE_DATABASE_DATASOURCE=${MYSQL_DATABASE}:${MYSQL_PASSWORD}@tcp(drone_mysql:3306)/drone?parseTime=true #mysql配置,要与上边mysql容器中的配置一致
          - DRONE_DATABASE_DRIVER=mysql
    
          - DRONE_TLS_AUTOCERT=false
    
          # gitea Config
          # - DRONE_AGENTS_ENABLED=true
          - DRONE_GITEA_SERVER=http://${HOST}:3000 # this is internal communication with gitea server on the same network
          - DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID}
          - DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET}
          - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} #RPC秘钥
          - DRONE_SERVER_HOST=${HOST}:8080
          - DRONE_SERVER_PROTO=http
          - DRONE_RUNNER_CAPACITY=2
          - DRONE_USER_CREATE=username:zhaobu,admin:true #管理员账号,是你想要作为管理员的Gitea用户名
          # droneclient Config
    
          # dronelog
          - DRONE_LOGS_PRETTY=true
          - DRONE_LOGS_COLOR=true
          - DRONE_LOGS_TEXT=true
          - DRONE_LOGS_DEBUG=true
          - DRONE_LOGS_TRACE=true
        depends_on:
          - gitea_server
        networks:
          dronenet:
    
      drone_agent:
        image: drone/agent:latest
        container_name: drone_agent
        restart: always
        depends_on:
          - drone_server
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - DRONE_RPC_PROTO=http
          - DRONE_RPC_HOST=drone_server
          - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} #RPC秘钥,要与drone_server中的一致
          - DRONE_RUNNER_CAPACITY=3
          - DRONE_LOGS_TRACE=true
          - DRONE_LOGS_DEBUG=true
          - DRONE_UI_USERNAME=root
          - DRONE_UI_PASSWORD=root
        networks:
          dronenet:
    

    测试持续集成

    使用drone_gitea_devops中的dronetest目录在gitea新建一个仓库dronetest,然后访问http://192.168.0.90:8080/登录drone,并且激活该仓库.

    1. 进入setting,添加访问Harbor的Secrets:

    docker_username: admin
    docker_password: Harbor12345

    1. 修改/etc/docker/daemon.json文件内容,新增"insecure-registries": ["192.168.0.90:8180"]

    在dronetest仓库根目录有.drone.yml文件

    kind: pipeline
    type: docker
    name: default
    
    # Create a named volume to share this directory with all pipeline steps
    volumes:
      - name: cache
        temp: {}
    
    steps:
      # 代码分析
      - name: 静态检测
        image: aosapps/drone-sonar-plugin
        settings:
          sonar_host: http://192.168.0.90:9001
          sonar_token: 204403c2cd049c9d0a0439a5eff536027b4e89c8
          # sonar_host:
          #   from_secret: sonar_host
          # sonar_token:
          #   from_secret: sonar_token
    
      - name: 测试
        image: golang:alpine
        environment:
          CGO_ENABLED: 0
          GOPROXY: https://goproxy.io,direct
        commands:
          - go test
        registry: https://d8c5y6di.mirror.aliyuncs.com/
        volumes:
          - name: cache
            path: /go
    
      - name: 编译
        image: golang:alpine
        environment:
          CGO_ENABLED: 0
          GOPROXY: https://goproxy.io,direct
        commands:
          - go build
        registry: https://d8c5y6di.mirror.aliyuncs.com/
        volumes:
          - name: cache
            path: /go
    
      - name: 镜像发布
        image: plugins/docker
        environment:
          CGO_ENABLED: 0
          GOPROXY: https://goproxy.io,direct
        settings:
          use_cache: true
          repo: 192.168.0.90:8180/dronetest/testgo
          dockerfile: ./Dockerfile
          # context:
          # tags: latest
          auto_tag: true
          # auto_tag_suffix: linux-amd64
          username:
            from_secret: docker_username
          password:
            from_secret: docker_password
          registry: http://192.168.0.90:8180 # 如果使用自建的镜像仓库,例如 Harbor,这里可以通过 registry 指定
          # 启用不安全通讯,才能使用http
          insecure: true
          mirror: https://d8c5y6di.mirror.aliyuncs.com
    
        # 自动部署容器到服务器
      - name: 部署
        image: appleboy/drone-ssh # 用于连接服务器
        settings:
          host: 192.168.0.90
          username: root
          password: 12345
          port: 22
          # command_timeout: 1000 # ssh命令行执行超时时间,300秒
          script:
            - docker pull 192.168.0.90:8180/dronetest/testgo:latest
            - docker rm -f docker-demo || true # 这里这样是因为如果不存在docker-demo,rm会报错
            - docker run -d -p 8056:8080 --name docker-demo 192.168.0.90:8180/dronetest/testgo:latest
    

    按照这个配置,每次推送到master分支,都会触发drone持续集成阶段。最终效果如下:

    golang静态代码检测

    使用sonarqube作为代码静态质量检测工具
    使用如下docker-compose启动sonarqube服务:

    version: "3.7"
    
    networks:
      sonarqubenet:
        external: false
        name: sonarqubenet
    
    # volumes:
    #   sonarqubedata:
    #     name: sonarqubedata
    
    services:
      sonarqube:
        image: sonarqube:8.1-community-beta
        container_name: sonarqube
        restart: always
        volumes:
          - ./sonarqube/conf:/opt/sonarqube/conf
          - ./sonarqube/data:/opt/sonarqube/data
          - ./sonarqube/logs:/opt/sonarqube/logs
          - ./sonarqube/extensions:/opt/sonarqube/extensions
        ports:
          - 9001:9000
        env_file: .env
        environment:
          # - sonar.jdbc.url=jdbc:postgresql://sonarqube_postgres/${POSTGRES_DB}
          # - sonar.jdbc.username=${POSTGRES_USER}
          # - sonar.jdbc.password=${POSTGRES_PASSWORD}
          - sonar.jdbc.username=sonar
          - sonar.jdbc.password=sonar
          - sonar.jdbc.url=jdbc:postgresql://sonarqube_postgres/sonar
        # command: ["--init"]
        networks:
          - sonarqubenet
        depends_on:
          - sonarqube_postgres
    
      # gitea 可以用postgres也可以用mysql
      sonarqube_postgres:
        image: postgres:alpine
        ports:
          - 5432:5432
        restart: always
        container_name: sonarqube_postgres
        volumes:
          - ./postgres/data:/var/lib/postgresql/data
        env_file: .env
        # environment:
        #   - POSTGRES_USER=${POSTGRES_USER}
        #   - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
        #   - POSTGRES_DB=${POSTGRES_DB}
        networks:
          sonarqubenet:
    

    的源码在
    docker-compose-manager
    访问:http://192.168.0.90:9001然后输入账号admin,密码admin登录,push代码后,可以看到结果
    静态质量检测.png
    还可以学习一下sonarqub的使用方法,修改检测的规则

    参考了:

    持续发布

    使用drone-ssh插件发布

    在.drone.yml文件中使用到了drone-ssh插件,在持续集成最后,会在192.168.0.90服务器上启动测试的容器服务,
    可以访问http://192.168.0.90:8056/health,返回结果说明部署成功
    image.png

    使用k8s部署

    k8s的学习可以参考文档

    如果觉得有用,可随意赞赏

    展开全文
  • 第一次打开该软件时,会自动下载最新的病毒库。 建议每次查杀前都下载最新的病毒库,以达到最优查杀效果。 护卫神·云查杀系统 v4.5 更新日志 1、再次优化内核算法,比3.X版本查杀效率提高50%以上,节省您的时间...
  • DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和...
    1. DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和运维。换句话 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作;
    2. DevOps基于持续构建、测试和集成的开发原则;
    3. DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集;
      在这里插入图片描述
    4. DevOps 的转型过程中,如果希望前置时间从月或季度缩短为几分钟,那么一般需要依次
      优化下面的约束点:环境搭建;代码部署;测试和准备的执行;紧密耦合的架构。
    5. 为部署流水线奠定基础 ; 实现快速可靠的自动化测试 ;实现并实践持续集成和持续测试 ;通过自动化、架构解耦等方式实现低风险发布。
    6. DevOps 不是简单的开发软件化,而是企业的学习能力不断提升的结果,将企业改造成敏捷应对的学习型组织,运用新的工具,优化组织架构和流程,不断地进行自我革命和创新的方式。工具是辅助,而非基础。
    7. Google 提出的 5 个 DevOps 原则,这套原则中必须依赖于工具辅助的部分只有后两点,更多的则是对于开发组织形式的内省:精简组织架构;愿意承担一部分试错带来的损失;分阶段地一小步一小步地进行转型;最大化地利用工具和自动化流程;对所有的过程和结果进行记录和分析。
      在这里插入图片描述
    8. DevOps工具博客一
    9. DevOps工具博客二
      git;gitlab,github;docker;kubernetes; linux平台;shell;监控服务分析平台zabbix和
    展开全文
  • 护卫神·云查杀 v4.5

    2019-11-12 05:51:40
    每次打开该软件时,系统会自动下载最新的病毒库,以达到最好查杀效果。护卫神·云查杀v4.5更新:1、再次优化内核算法,比3.X版本查杀效率提高50%以上,节省您的时间;2、进一步增加对组合木马的查杀,如在图片文件中...
  • 我所在的测试有一套PC软件前端自动化工程,在进行自动化测试时,需要在一台古老的xp机器上运行,但这台古老的xp机器带给我诸多烦恼,特别是使用Pycharm编辑器时,我遇到了以下三个问题: 电脑关机后无法重新运行...
  • ubuntu安装配置FTP

    2016-11-03 20:10:14
    Ubuntu 12.04下安装FTP软件当然选择大名鼎鼎的vsftpd(very secure FTP daemon), Ubuntu装vsftpd很简单,一命令就行: sudo apt-get install vsftpd 命令执行过程中,安装程序会给本地创建一个名为“ftp”的...
  • Ubuntu下搭建FTP服务器

    2014-07-20 21:01:59
    Ubuntu 12.04下安装FTP软件当然选择大名鼎鼎的vsftpd(very secure FTP daemon), Ubuntu装vsftpd很简单,一命令就行: sudo apt-get install vsftpd 命令执行过程中,安装程序会给本地创建一个名为“ftp”...
  • ubuntu12.04安装vsftp

    2014-08-12 12:03:00
    Ubuntu 12.04下安装FTP软件当然选择大名鼎鼎的vsftpd(very secure FTP daemon), Ubuntu装vsftpd很简单,一命令就行: sudo apt-get install vsftpd 命令执行过程中,安装程序会给本地创建一个名为“ftp”...
  • Ubuntu14.04搭建ftp

    千次阅读 2014-07-30 22:01:59
    我装的服务器系统是Ubuntu 14..04 LTS,FTP软件当然是选择大名鼎鼎的vsftpd(very secure FTP daemon), ...命令执行过程中,安装程序会给本地创建一个名为“ftp”的用户,命令执行完之后会自动启动FTP服务。
  • Time machine字幕编辑器

    2017-11-02 18:55:34
    字幕制作软件是一款由人人影视字幕开发的字幕制作软件,人人影视字幕为了方便字幕制作字幕以及字幕调整调整字幕,倾力打造功能丰富的的字幕制作工具《时间机器Time machine》 1.支持SRT,ASS,格式字幕,...
  • 我装的服务器系统是Ubuntu 12.04 LTS,FTP软件当然是选择大名鼎鼎的vsftpd(very secure FTP daemon), 用系统自带的FTP还好Ubuntu装vsftpd还是很简单,一命令就行: sudo apt-get install vsftpd 命令执行过程...
  • coding coding coding 感悟

    2011-01-20 22:15:00
    前些年写软件,感觉是在搭积木 ,一个软件用控件或者对象组合起来 ,写点业务逻辑,偶尔写两个算法(递归、树),就完成了。自测,提交给客户。反馈,修改,基本轻轻松松。 现在写代码感觉非常耗神,先不说功能强大...
  • 韵脚大全 v6.6.rar

    2019-07-11 07:27:25
    06、软件关闭时自动修改首页面供下次启动时调用 2011.09.17 【v5.7】 01、修正Win7系统下输入法读取错误问题 02、韵脚查询区域、草稿区域字体稍加增大 03、双击“成语区域”弹出“成语联想”页面,...
  • PowerWord.exe

    2020-04-01 09:23:25
    翻译是许多手机翻译软件必有的功能之一,金山词霸的整翻译可以正确互译一些简单的中英文句子或短语,不过倘若句式过于复杂,那么就像大多数的手机翻译软件一样,它很可能会给你一份半成品释义。 英语学习 在...
  • 万能拼音 v1.9

    2019-11-01 08:50:20
    可以帮您学习五笔和英语的实用必备软件,词库有基础、网络、动态、新鲜四种组合,满足不同人士的需要。它具备以下4大特色:1、热门词组一个也不能少: 利用先进搜索分析技术,自动分析网罗互联网上出现的热门词组,...
  • 这是一套非常完善的图形系统,适合在电力、煤炭、化工、仿真、网络、自动化等各种工业监控软件以及图形建模、图形管理、图形分析、中小型GIS系统、工作流、中文表格、表单、工程绘图等软件项目中应用。 基本特点 : ...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

自动组句软件