ジェンキンスのパイプラインを書くとき、それがうまくいくかどうか見るためにそれぞれの新しい変更をコミットすることは非常に不便なようです。
コードをコミットせずにこれらをローカルで実行する方法はありますか?
その全目的はJenkinsをスクリプト化することであるため、Pipelineスクリプトをローカルで実行することはできません。 (Jenkinsfile
を短くし、実際にJenkinsの機能を扱うコードに限定するのが最善の理由です。実際のビルドロジックは、1行のsh
またはbat
ステップで呼び出す外部プロセスまたはビルドツールで処理する必要があります。)
ライブでJenkinsfile
への変更をテストしたいがをコミットせずににしたい場合は、 再生 機能 を使用してください。 1.14で追加
JENKINS-33925 は自動テストフレームワークへの要望を追跡します。
私にはうまくいく解決策があります。これは、dockerで実行されているローカルのjenkinsと、コミットごとにローカルのjenkinsでパイプラインを起動するgit Webフックで構成されています。パイプラインをテストするためにgithubまたはbitbucketリポジトリにプッシュする必要はもうありません。
これはLinux環境でのみテストされています。
この命令は少し長いですが、これを機能させるのはかなり簡単です。ほとんどのステップがあります。
選択の代わりにDockerfileというファイルを作成します。これを/opt/docker/jenkins/Dockerfile
に配置します。
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins
local_jenkinsの画像を作成する
これは一度だけ、またはDockerfileに何かを追加した後に行う必要があります。
$ docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
local_jenkinsを起動して再起動します
時々、あなたは簡単にジェンキンズを始めて、再スタートしたいです。例えば。あなたのマシンの再起動後。このために私は自分のホームフォルダの.bash_aliases
に入れるエイリアスを作りました。
$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases
$ source .bash_aliases # To make it work
/opt/docker/jenkins/jenkins_home
フォルダが存在し、あなたにユーザに読み書きの権限があることを確認してください。
Jenkinsを起動または再起動するには、次のように入力してください。
$ localjenkinsrestart
ローカルのjenkinsで行ったことはすべて/ opt/docker/jenkins/jenkins_homeフォルダに保存され、再起動後も保持されます。
あなたのdocker jenkinsにsshアクセスキーを作成してください
これはこれが機能するために非常に重要な部分です。まず、dockerコンテナを起動してbashシェルを作成します。
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
これでdockerコンテナに入りました。これはあなたの端末のjenkins@e7b23bad10aa:/$
のようなもので見ることができます。 @の後のハッシュは確かに異なります。
キーを作成する
jenkins@e7b23bad10aa:/$ ssh-keygen
プロンプトが表示されるまで、すべての質問に対してEnterキーを押します。
鍵をコンピューターにコピーしてください。港湾労働者のコンテナの中からあなたのコンピュータはあなたが疑問に思うべき172.17.0.1です。
jenkins@e7b23bad10aa:/$ ssh-copy-id [email protected]
user =あなたのユーザ名、172.17.0.1はdockerコンテナ内からあなたのコンピュータへのIPアドレスです。
この時点でパスワードを入力する必要があります。
それではdockerコンテナ内から自分のコンピュータに移動してループを完成させてみましょう。
jenkins@e7b23bad10aa:/$ ssh [email protected]
今回はパスワードを入力する必要はありません。もしそうなら、何かがうまくいかなかったので、もう一度やり直さなければなりません。
これで、コンピュータのホームフォルダに入ります。 ls
を試してみてください。
抜け出す必要があるsshシェルのチェーンがあるのでここで止めないでください。
$ exit
jenkins@e7b23bad10aa:/$ exit
右!今、私たちは戻ってきて続行する準備が整いました。
あなたのJenkinsをインストールしてください
あなたのブラウザの中のあなたの地元のJenkinsは http:// localhost:8787 で見つかるでしょう。
あなたが最初にあなたのブラウザをあなたの地元のジェンキンスに向ける時、あなたはインストールウィザードで貪欲になるでしょう。デフォルトは問題ありませんが、セットアップ中に必ずパイプラインプラグインをインストールしてください。
あなたのジェンキンスをセットアップしてください
マトリックスベースのセキュリティを http:// localhost:8787/configureSecurity でアクティブにすることは非常に重要です andマトリックスに自分自身を追加してすべてのボックスにチェックマークを付けることで、すべての権利を自分に付与します。 (一番右にティックオールボックスのアイコンがあります)
Jenkins’ own user database
を選択しますMatrix-based security
を選択しますUser/group to add:
フィールドにあなたのユーザー名を書き、[ Add ]
ボタンをクリックしてください。Prevent Cross Site Request Forgery exploits
がチェックされていないことを確認してください。 (このJenkinsはあなたのコンピュータからしか到達できないので、これはそれほど大きな問題ではありません)[ Save ]
をクリックしてJenkinsからログアウトし、もう一度ログインしてそれが機能することを確認します。 再起動する前に最初からやり直して/opt/docker/jenkins/jenkins_home
フォルダを空にする必要がない場合はgitユーザーを追加します
私たちは、最小限の権限でgitフックが地元のJenkinsにログインできるようにする必要があります。仕事を見て、建てるだけで十分です。そのため、パスワードgit
を持つlogin
というユーザーを作成します。
ブラウザで http:// localhost:8787/securityRealm/addUser に移動し、ユーザー名としてgit
、パスワードとしてlogin
を追加します。 [ Create User ]
をクリックしてください。
gitユーザーに権限を追加します
ブラウザの http:// localhost:8787/configureSecurity ページに移動します。 gitユーザーを行列に追加します。
User/group to add:
にgit
を入力し、[ Add ]
をクリックしてください。今度は、gitユーザーに対する最低限の権限についてボックスをチェックします。これらだけが必要です:
Prevent Cross Site Request Forgery exploits
チェックボックスがオフになっていることを確認し、[ Save ]
をクリックしてください。
ユーザー名がuser
で、その中にJenkinsfile
が含まれるgit対応プロジェクトはproject
と呼ばれ、/home/user/projects/project
にあるとします
あなたの http:// localhost:8787 にJenkinsが新しいパイプラインプロジェクトを追加しました。参考のためにhookpipelineと名付けました。
New Item
をクリックしてください。hookpipeline
という名前を付けます[ OK ]
をクリックPoll SCM
にチェックを入れます。スケジュールを空のままにします。Pipeline script from SCM
を選択Repository URL
フィールドに[email protected]:projects/project/.git
と入力します。Script Path
フィールドにJenkinsfile
と入力します。/home/user/projects/project/.git/hooks
フォルダーに移動して、これを含むpost-commit
というファイルを作成します。
#!/bin/sh
BRANCHNAME=$(git rev-parse --abbrev-ref HEAD)
MASTERBRANCH='master'
curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build
echo "Build triggered successfully on branch: $BRANCHNAME"
このファイルを実行可能にします。
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
コミット後フックをテストします。
$ /home/user/projects/project/.git/hooks/post-commit
フックパイプラインプロジェクトがトリガーされたかどうかをJenkinsで確認してください。
最後にプロジェクトに任意の変更を加え、その変更を追加してコミットします。これであなたの地元のJenkinsのパイプラインが起動します。
幸せな日々!
TL; DR
ロングバージョン
Jenkins Pipelineテストはますます困難になっています。ユーザーが新しいJenkins Pipelineを公開したものに限定されていた従来の宣言型ジョブ構成アプローチとは異なり、宣言型部分を独自のものと混在させるビルドプロセス用の本格的なプログラミング言語です。コード。優れた開発者として、この種のコードに対しても単体テストをいくつか行いたいと思います。
Jenkins Pipelinesを開発するときに従うべき3つのステップがあります。 ステップ1.は、ユースケースの80%をカバーするはずです。
例
pipelineUnit GitHubレポジトリには、 Jenkins Pipeline Unitテストフレームワークの使用方法に関するSpockの例がいくつか含まれています
書いている時点で(2017年7月末)Blue Ocean プラグインであなたはチェックすることができます宣言型パイプラインの構文は、ビジュアルパイプラインエディタで直接指定できます。エディターは、githubプロジェクトに対してのみ「configure」をクリックしたときにBlue Ocean UIから機能します(これは既知の問題であり、gitなどでも機能するように機能しています) 。
しかし、 この質問 で説明されているように、あなたはブラウズするエディタを開くことができます:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
次に、ページ中央をクリックしてCtrl+S
を押すと、テキストエリアが開き、そこでパイプライン宣言スクリプトを貼り付けることができます。あなたが更新をクリックするとき、構文エラーがあれば、エディタはあなたに構文エラーがどこにあるか知らせます。このスクリーンショットのように:
構文エラーがない場合は、テキストエリアが閉じて、ページにパイプラインが視覚化されます。それが何も保存しないことを心配しないでください(それがgithubプロジェクトであるならば、それはJenkinsファイルの変更をコミットするでしょう)。
私はJenkinsに不慣れで、これは非常に役に立ちます。これがないと、Jenkinsファイルを正常に機能するまで何度もコミットする必要がありました(非常に面倒です)。お役に立てれば。乾杯。
パーティーには少し時間がかかりますが、それが私がjenny
という、いくつかの中核的なJenkinsfileステップの小さな再実装を書いた理由です。 ( https://github.com/bmustiata/jenny )
私が知っている限りでは、この Pipeline Plugin は新しいJenkinsファイルのメカニズムの「エンジン」です。
Jenkinsファイルにコピーするときに必要な追加の手順があるかどうかはわかりませんが、構文などはまったく同じです。
編集: "エンジン"の参照を見つけ、 this 機能の説明、最後の段落、最初のエントリを確認してください。
私の開発環境では、適切なGroovyエディタが欠けていますが、大量のJenkinsfileの問題は単純な構文エラーが原因です。この問題に取り組むために、JenkinsファイルをあなたのJenkinsインスタンスに対して検証することができます($JENKINS_HTTP_URL
で実行)。
curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
他の人がすでに述べたリプレイ機能は別として(その有用性については同じです)、私は以下のものも有用であることがわかりました:
私はいくつかの更新を行うと迅速に実行するために、将来の再生を使用しています。
いくつかの制限はありますが、スクリプト化されたパイプラインでは、このソリューションを使用します。
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()
あなたのSSHキーをあなたのJenkinsプロファイルに入れて、それから次のように 宣言型リンター を使ってください:
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
これはあなたのJenkinsファイルを静的に分析します。選択したエディタで、そのコマンドを自動的に実行するキーボードショートカットを定義します。私が使用しているVisual Studioのコードでは、Tasks> Configure Tasksの順に進み、次のJSONを使用してValidate Jenkinsfileコマンドを作成します。
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "Shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}