2

我的 Bitbucket 存储库中有许多函数和一个 Jenkinsfile 来启动一项作业以部署这些 python 函数。我需要根据存储库中更改的文件部署功能。我的仓库的结构是这样的:

-- functions
  -- func1
    -- app.py
  -- func2.py
    -- app.py
  -- fun3.py
    -- app.py

我想要做的是:当我改变一些功能时,只部署这个功能而不是其他的。所以当我提交变更时,我需要查找变更的文件并部署相应的功能。在 jenkinsfile 里面我做了这样的事情:

            sh '''
                last_commit=$(git describe --always)

                access_token=$(cat BITBUCKET_TOKEN)             
                changed_file=$(curl https://api.bitbucket.org/1.0/repositories/account/reponame/changesets/$last_commit?access_token=$access_token | jq -r .files[].file)
                echo $changed_file > CHANGED_FILE
            '''
           CHANGED_FILE = readFile 'CHANGED_FILE'
           if (CHANGED_FILE.contains('functions/func1')) {
              // instructions ... 
           }
           CHANGED_FILE = readFile 'CHANGED_FILE'
           if (CHANGED_FILE.contains('functions/func2')) {
              // instructions ... 
           }

在这里,我只得到最后一次提交,而且我只得到一个更改的文件。我想知道使用什么逻辑来处理许多更改文件的提交?我尝试使用 Webhook 插件,但它不能这样做。

4

1 回答 1

2

你可以运行这样的东西(对不起我的坏 Groovy):

def changeLogSets = this.currentBuild.rawBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
   def entries = changeLogSets[i].items
   for (int j = 0; j < entries.length; j++) {
      def entry = entries[j]
      def files = new ArrayList(entry.affectedFiles)
      for (int k = 0; k < files.size(); k++) {
         def file = files[k]
           this.deployFunction(file.path)
      }
  }
}

构建 docker 映像对我有用。仅用于一个巨大的单一存储库中的更改。

对于运行脚本取消选中: 在此处输入图像描述

于 2019-02-27T14:22:29.230 回答