最近、複数のテスト環境を構築するには、Jenkinsのdevビューの下にあるすべてのタスクを、sitなどのビューにバッチコピーする必要があります。
解説
ジェンキンスのタスク名は[测试环境标识]-[工程名称],如:dev-daodaotest,sit-daodaotest
ルール:。
表示するタスクは、正規表現で表示します[测试环境标识]-.* ,如:dev-.*,sit-.*
。
最初のタイプ:ディレクトリの下の一括コピー
ジェンキンスタスクはに基づいているxml
コピーすることができます保存されているすべてのドキュメントxml
のバッチモードを作成します。
# 进入 jobs 目录下
$ cd ~/.jenkins/jobs
# 创建批量复制 shell 脚本
$ vi copyViewJobs.sh
#!/bin/bash
# 视图名称
viewName=$1
# 新视图名称
newViewName=$2
# 循环复制任务
for jobName in `ls /home/jenkins/.jenkins/jobs/`
do
# 判断文件存在并且是目录
if test -d $jobName
then
# 目录为 $viewName 开头,则进行复制
if [[ $jobName == *$viewName* ]]; then
# 截取工程名称
name=`echo $jobName|awk 'BEGIN{FS="'$viewName'-"} {print $2}'`
newJobName=$newViewName-$name
echo $newJobName
# 复制 config.xml
mkdir $newJobName && cp $jobName/config.xml $newJobName/
fi
fi
done
# 执行批量复制脚本,dev 视图下的任务负责到 sit 视图下
$ sh copyViewJobs.sh dev sit
注:コピー後、Jenkinsは設定を再読み込みして有効にする必要があります。操作メニューのパス:Manage Jenkins
-》Reload Configuration from Disk
。
2番目の種類:jenkins-cli
実装手順は最初の手順と同様です。独自のスクリプト言語に従って実装できます。主なコマンドを以下に簡単に説明します。
jenkins-cli
使用方法については、http:// localhost:8080 / cliを参照してください。
# 下载 jenkins-cli.jar
$ wget http://localhost:8080/jnlpJars/jenkins-cli.jar
# 获取视图下的所有任务
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -auth daodaotest:daodaotest list-jobs dev
# 复制任务
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -auth daodaotest:daodaotest copy-job dev-daodaotest sit-daodaotest
3番目:REST API
2番目と同様に、キーコマンドのみが導入されています。ここでpython-jenkins
は例としてapiを取り上げます。
python-jenkins
公式ウェブサイトのアドレス:https : //opendev.org/jjb/python-jenkins
Python Jenkinsをインストールする
# 安装 pip
$ sudo yum install epel-release && sudo yum install python-pip
# 安装 python-jenkins
$ pip install python-jenkins
ビューでタスク名を取得する
import jenkins
server = jenkins.Jenkins('http://localhost:8080', username='daodaotest', password='daodaotest')
# 查询 dev 视图下的所有任务
jobs = server.get_jobs(folder_depth=0, view_name='dev')
# 循环打印任务名称
for job in jobs:
print(job['fullname'])
タスクをコピー
import jenkins
server = jenkins.Jenkins('http://localhost:8080', username='daodaotest', password='daodaotest')
# 任务是否存在,True 为存在,Fasle 为不存在
print(server.job_exists('dev-daodaotest'))
# 复制任务
server.copy_job('dev-daodaotest','sit-daodaotest')
# 打印任务信息
jobinfo = server.get_job_info('sit-daodaotest')
print(jobinfo)
「リクエスト403エラー403有効なクラムが含まれていませんでした」
エラーの原因:jenkinsがhttpリクエストヘッダーに.crumbという名前のトークンを配置しました。リバースプロキシを使用し、jenkins設定で「クロスサイトリクエストフォージェリエクスプロイトの防止」をチェックした後、このトークンは転送サーバーnginxによって不正なヘッダーとして削除され、ジャンプが発生します。失敗しました。
解決策:Jenkinsのセキュリティ設定で「クロスサイトリクエストフォージェリの悪用を防ぐ」をキャンセルします。