windows 获取Azure DevOps上当前正在运行的构建的进程ID

deyfvvtc  于 2023-11-21  发布在  Windows
关注(0)|答案(1)|浏览(236)

我正在尝试拼凑一些脚本,以将CodeQL扫描添加到Azure DevOps上的现有构建管道中。对于.NET等编译语言,需要使用预编译命令来创建CodeQL数据库以监视编译。我已将其设置如下:
YAML:

  1. parameters:
  2. - name: githubToken
  3. default: ''
  4. - name: buildType
  5. default: ''
  6. - name: codeql_db
  7. default: "codeql-db"
  8. steps:
  9. - script: |
  10. echo "##vso[task.prependpath]/apps/ado/tools/codeql"
  11. displayName: 'Setup codeql'
  12. - task: PythonScript@0
  13. displayName: 'CodeQL setup environment'
  14. inputs:
  15. scriptSource: 'filepath'
  16. scriptPath: '$(Pipeline.Workspace)/utils/codeql_setup.py'
  17. arguments: '--github-token ${{ parameters.githubToken }} --build-type ${{ parameters.buildType }} --repository-name $(Build.Repository.Name) --repository-path $(Build.Repository.LocalPath) --agent-os $(agent.os) --codeql-db ${{ parameters.codeql_db }}'
  18. workingDirectory: $(Pipeline.Workspace)

字符串
codeql_setup.py:

  1. if build_type in compiled_buildtypes:
  2. print('Compiled build type identified. Setting up indirect build tracing.', flush=True)
  3. codeql_setup_command = ['codeql', 'database', 'init','--source-root', repository_local_path, '--language', repo_languages_argument, '--begin-tracing', codeql_db_name, '--overwrite']
  4. # Set additional options
  5. if len(repo_languages) > 1 :
  6. print('Multiple languages detected.', flush=True)
  7. codeql_setup_command.append('--db-cluster')
  8. if 'windows' in agent_os.lower():
  9. print('Windows Agent detected.', flush=True)
  10. codeql_setup_command.append(f'--trace-process-level {PROCESS_NUMBER}')
  11. database_init_proc = subprocess.run(codeql_setup_command, env=os.environ.copy())
  12. print('CodeQL database setup for indirect build tracing.', flush=True)


我的问题是第二个额外的参数。对于Windows代理,进程号或父进程名是codeQL监视编译所必需的。
有没有一种简单的方法来获取构建的进程ID?类似于我检索操作系统的方法。

nbnkbykc

nbnkbykc1#

打开CodeQL扫描码和Github文档,需要获取当前Agent.Worker.exe进程ID。
为了满足您的要求,您可以使用以下PowerShell命令来获取进程ID。

  1. Get-Process Agent.Worker | Select id

字符串
然后,您可以将ProcessID设置为Pipeline变量。
举例来说:

  1. steps:
  2. - powershell: |
  3. Get-Process Agent.Worker | Select id
  4. $test = Get-Process Agent.Worker | Select id
  5. echo $test.id
  6. echo "##vso[task.setvariable variable=ProcessID]$test.id"


您可以在接下来的任务中使用变量:$(ProcessID)

展开查看全部

相关问题