よくある質問と回答

ビルドをスキップする方法は?

README等ちょっとしたドキュメント修正のみの時など、screwdriverのビルドをスキップさせたい場合があると思います。

masterにpushする際にビルドをスキップさせたい場合は、commitメッセージの中に[ci skip] または [skip ci]の文字列を追加してください。 また、プルリクエストのマージ時にビルドをスキップさせたい場合は、プルリクエストのタイトル欄に [ci skip] または [skip ci]の文字列を追加してください。

注意: プルリクエストビルドはスキップ出来ません。 commitメッセージに [skip ci][ci skip] を含めても、プルリクエスト時のビルドはスキップされません。(プルリクエストビルドは常に実行されます)

パイプラインの作り方は?

新しいパイプラインを作成するには、画面右上の作成アイコンをクリックし、gitリポジトリのURLをフォームに入力してください。master以外のブランチを指定する場合は、#の後にブランチ名を指定してください。

Create a pipeline

パイプラインを手動で開始するには?

ビルドを手動で開始させたい場合は、パイプラインページにある「Start」ボタンをクリックします。
または、ビルドを選択後ドロップダウンメニューで「Start pipeline from here」を選択します、次に「Yes」をクリックするとビルドが起動します。
パイプラインを開始すると~commitをトリガーにもつ全てのジョブのビルドが開始します。

スタートボタンをクリック:
Start a pipeline

2番目のオプションについては、ビルドを再実行、Detached Jobをスタートするには?を参照してください。

パイプラインのリポジトリやブランチを変更したい場合は?

パイプラインのリポジトリやブランチを変更したい場合は、「Options」タブをクリックして、Checkout URLの入力欄を更新し、「Update」ボタンをクリックしてください。

Update a pipeline

ジョブの disable/enable を一時的に切り替えるには?

一時的にジョブの disable/enable を切り替えるには、「Options」タブの画面で、切り替えたいジョブの横にあるトグルボタンをクリックして切り替えを行ってください。
オプションで、ジョブをdisable/enableにする理由を指定することもできます。

Disable a pipeline

パイプラインがソースコードと正しく同期しているか確かめるには?

もしソースコードで何か変更を加えてもパイプラインが同期されない場合は、「Options」タブの「Sync」欄にあるアイコンをクリックして同期してください。 同期は「SCM webhook」、「Pull Request」、「Pipeline」とそれぞれ別々に同期できます。

Sync a pipeline

パイプラインを削除するには?

パイプラインを削除するには、「Options」タブ内にある削除アイコンをクリックします。一度削除したパイプラインは戻すことは出来ませんのでご注意ください。

Delete a pipeline

パイプラインメトリクスを表示するには?

メトリクスページにアクセスするには、 ビルドをクリックして「Go to build metrics」を選択するか、パイプラインページのタブの「Metric」を選択してください。

See metrics

ビルドログの時間形式を切り替えるには?

ビルドログの左上の文字列をクリックすると、Since build started, Since step started, Local TimeStamp, UTC TimeStamp などの時間形式に切り替えることができます。 Toggle time formats

「Build failed to start」のエラーを修正するには?

このエラーは(VMのexecutorを使用している場合は)hyperdのプロセスがダウンしているなどクラスタセットアップ時の問題や、ビルドを行うDocker imageの問題など、様々な理由で起こります。 従ってどのレイヤーでエラーが起きているかによって修正する方法も変わってきます。

  1. /opt/sd/launch: not found このエラーが出る場合はAlpineベースのimageを利用していることが原因となります。glibcの代わりにmuslが使われているためです。回避策としてはDocker imageの作成時に下記のシンボリックリンクを作成します。 mkdir /lib64 && ln -s /lib/ld-musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
  2. hyperdのバグが時々発生し、VOLUMEの定義されたイメージが継続的に起動に失敗します。そういったイメージの一つにgradle:jdk8が上げられます。現時点でのワークアラウンドは他のdocker imageを利用するか、 このDockerfileからVOLUMEの行を除いてリビルドすることです。

ビルドのロールバックを行うには?

ビルドのロールバックを行うには下記の2パターンの方法があります。

過去のビルドを再実行、Detached Jobを実行するには?

過去のイベントから再ビルドを行う手順は下記の通りとなります。

  1. イベントリストから目的のイベントをクリックすると、詳細なイベントグラフが表示されます。
  2. ビルドを再実行したいジョブをクリックします。
  3. ポップアップから「Start pipeline from here」のリンクをクリックします。
  4. 最後に「YES」を押してジョブを実行させます。 Load event graph Start new build for job

ロールバックするにはdetached buildで行います。 Metadataを使って最後のジョブ(下記の例ではジョブD)でmeta setコマンドでイメージ名やバージョン情報のメタを設定し、ロールバック用のジョブ(下記の例ではdetached)でmeta get コマンドを使用して設定されたメタ情報を取得します。detachedジョブはジョブDで設定されたメタ情報にアクセスできます。

ビルドをUNSTABLEの状態にするには?

ビルド中にAPIを呼び出すことで、ビルドのステータスをUNSTABLEにすることができます。Screwdriver.cdは、このステータスで表示されたビルドを成功ではないものとみなし後続のジョブを実行しません。 詳しくはUNSTABLEビルドのサンプルリポジトリを参照してください。

Screwdriverが使用しているシェルは?

ステップに記述した処理はデフォルトでBourne shell (/bin/sh)で実行されます。他のシェル(bashなど)で実行したい場合はUSER_SHELL_BIN環境変数で指定することができます。

Artifactsをアップロードする時間を短縮するには?

管理者が予め使用できるように設定していれば、SD_ZIP_ARTIFACTSの環境変数をtrueにすることで、Artifactsをアップロードする前にzip化します。

shallow cloningを無効にするには?

shallow cloningを無効にするには、GIT_SHALLOW_CLONEの環境変数をfalseにセットします。

デフォルトではScrewdriverはdepth 50でソースリポジトリをshallow cloneします。また、--no-single-branchのフラグもデフォルトで有効にしています。

shallow cloningを有効のままにしてgitリポジトリへpushを行うのであれば、使用するイメージに含まれるgitのバージョンが1.9かそれ以上である必要があります。あるいは、sd-step exec core / git" GIT COMMAND "を呼び出して、Screwdriverにバンドルされているバージョンのgitを使用することもできます。

ビルドイメージの最小ソフトウェア要件は?

Screwdriverはビルドコンテナイメージに制限がありません。しかし、最低でもcurlopensshがインストールされている必要があります。さらに、コンテナのデフォルトユーザはrootもしくはsudo NOPASSWDが有効になっている必要があります。

また、imageがAlpineベースの場合は、追加で次のシンボリックリンクのような回避策が必要です。 mkdir -p /lib64 && ln -s /lib/ld-musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

Saucelabsとの連携は?

ブログ記事を参考にしてください。 https://blog.screwdriver.cd/post/161515128762/sauce-labs-testing-with-screwdriver

サンプルリポジトリはこちらです。 https://github.com/screwdriver-cd-test/saucelabs-example

ビルド内からGitリポジトリにpushされたときにパイプラインを実行するには?

Screwdriverはデフォルトでgitユーザーsd-buildbotを使用します。したがって、ビルド内でgitコミットを行うと、コミットユーザーはsd-buildbotになります。

これは、webhook処理に影響を及ぼします。 ヘッドレスユーザーがパイプラインを無期限に実行することを防ぐために、ヘッドレスユーザーによるコミットを無視するようにScrewdriverクラスター管理者はwebhookプロセッサの設定を行えます。これを行うには、[IGNORE_COMMITS_BY](https://github.com/screwdriver-cd/screwdriver/blob/ec959e1590909259479fe34f2f26d91f227025aa/config/custom-environment-variables.yaml#L323-L325)環境変数を設定します。通常、デフォルトgitユーザーのsd-buildbotがこのリストに追加されます。

ユーザーは、別のgitユーザーを使用することでこの動作を上書きできます。例えば、git config --global user.name my-buildbotとすることで、Screwdriverのビルドからのgitコミットはmy-buildbotユーザーによって行われ、webhookプロセッサに無視されることなく、Screwdriverパイプラインが実行されます。

sd-setup-scmステップで、プルリクエストのビルドが fatal: refusing to merge unrelated historiesエラーで終了するのはなぜ?

プルリクエストを出しているブランチに、 $GIT_SHALLOW_CLONE_DEPTHコミット (デフォルト:50)以上のコミットがある場合エラーで失敗することがあります。
このメッセージは、gitがfeatureブランチとmainブランチの間に共通の祖先が見つけられないことを示しています。
この問題を解決するには、$GIT_SHALLOW_CLONEを無効にする、大きな数に調整するまたは、featureブランチのコミット数を減らしてください。 (例: rebase, squashなど)
詳しくはこちらのドキュメントをご確認ください。