drone-docker添加tag管理

目的

drone提供的docker插件不能帮助我们自动记录image tag,通过修改源代码,添加自动记录tag,更新tag的功能.

方案

将每次的tag记录在一个能持久保存的地方,以达到能记录的目的,例如存在外部数据库中.并在新的一次构建中,从数据库中获取上次的构建状态,最终生成新的tag标签.

代码

	if c.Bool("pvtag") {
		
		fmt.Println(c.String("pvtag.storeplugin"), c.String("pvtag.pluginurl"), c.String("pvtag.template"))
        #初始化一个存储插件,例如存在mysql数据中
		tagStore, err := docker.InitTagStore(c.String("pvtag.storeplugin"),
			docker.WithUrl(c.String("pvtag.pluginurl")),
		)
		if err != nil {
			fmt.Println(err)
			panic("init registry failed")
		}

      #查找是否存在上一次的记录
		tag := tagStore.TagFind()
        #第一次构建,生成初始的tag
		if len(tag) == 0  {
			if len(c.String("pvtag.template")) != 0 {
				tag, _ = docker.TagTemplateInit(c.String("pvtag.template"))
			} else {
				tag, _ = docker.TagTemplateInit("0.0.0")
			}
			tagStore.TagInset()
			tags := []string{tag}
			plugin.Build.Tags = tags
		} else {
            #根据上一次的构建tag,生成新的tag
			var newTag *semver.Version
			if len(c.String("pvtag.template")) != 0 {
				oldTag ,_:= docker.TagTemplateParse(tag)
				templateTag, _ := docker.TagTemplateParse(c.String("pvtag.template"))
				templateTag.Patch = oldTag.Patch
				newTag = templateTag
			} else {
				newTag, _ = docker.TagTemplateParse(tag)
			}
			newTag.Patch++
			tagString := newTag.String()

			tags := []string{tagString}
			plugin.Build.Tags = tags

            #更新tag
			tagStore.TagUpdate(tagString)

		}
	}

项目参考: https://blog.csdn.net/qq_34958368/article/details/107638674

项目地址:https://github.com/Sean0124/drone-docker.git

你可能感兴趣的:(kubernetes,kubernetes)