リポジトリにプッシュして戻す
パイプラインからリポジトリを変更する必要がある場合、変更をプッシュ バックすることができます。既定で設定されている http git origin の使用をおすすめします。http は事前構成済みのため、http を使用したプッシュバックはシームレスに機能します。
リポジトリをプッシュバックする際は [skip ci]
を使用します。これにより、新しいコミットでパイプラインがトリガーされることを防止して、永久ループを回避します。
Origin 変数
パイプラインには、http と ssh の origin url を含む、2 つの既定の変数があります。
${BITBUCKET_GIT_HTTP_ORIGIN}
${BITBUCKET_GIT_SSH_ORIGIN}
これらは、スクリプトや、パイプラインで呼び出される他のツールに origin を渡す必要がある場合に使用できます。
プッシュの例
ブランチへの変更のコミット
パイプライン内からリポジトリを動的に変更する必要がある場合、次のようなスクリプトを使用できます。
pipelines:
default:
- step:
script:
- echo "Made a change in build ${BITBUCKET_BUILD_NUMBER}" >> changes.txt
- git add changes.txt
- git commit -m "[skip ci] Updating changes.txt with latest build number."
- git push
「サンプル リポジトリへの変更のコミット」で実際の例を確認できます。
新しいタグのプッシュ
バージョン管理にタグを使用する場合、次のようなスクリプトを使用できます。
pipelines:
default:
- step:
script:
- echo "Made a change in build ${BITBUCKET_BUILD_NUMBER}" >> changes.txt
- git add changes.txt
- git commit -m "Updating changes.txt with latest build number."
- git tag -am "Tagging for release ${BITBUCKET_BUILD_NUMBER}" release-${BITBUCKET_BUILD_NUMBER}
- git push origin release-${BITBUCKET_BUILD_NUMBER}
新しいタグのプッシュ用のサンプル リポジトリでデモを確認できます。
代替 Git クライアントの構成
パイプラインで提供される Git クライアントを使用していない場合、以下を構成する必要があります。
- ${BITBUCKET_GIT_HTTP_ORIGIN} 変数を使用する origin
- git クライアントでプロキシを使用 (プロキシ URL は http://localhost:29418)
代替の認証方法を使用したプッシュ バック
リポジトリでブランチ権限が有効になっていて、既定で構成された HTTP origin を使用してコミット バックできない場合や、"Bot" アカウントまたは別の認証方法を使用してコミットしたい場合は、いくつかのオプションがあります。セキュリティと、HTTP origin との互換性のため、OAuth を使用することをおすすめします。
OAuth、アプリのシークレット キー、または SSH をアカウントに構成する場合、これらの資格情報を使用したアクセスを許可するリポジトリを制限することはできません。
OAuth
- Bitbucket でアバターをクリックしてワークスペースを選択し、[設定] > [OAuth コンシューマー] > [コンシューマーを追加] をクリックします。
- 新しいクライアント/コンシューマーを作成し、自身のアカウントのリポジトリへの読み取りおよび書き込み権限を付与します。
- 名前と任意で説明を提供し、コールバック url を https://bitbucket.org に設定します。
- [権限] > [リポジトリ] で、読み取りと書き込みの両方を選択します。
- [保存] をクリックします。
- 新しく作成されたコンシューマーに移動してキーを記録します。
- CLIENT_ID および CLIENT_SECRET という名前のパイプライン変数としてキーを追加します。
bitbucket-pipelines.yml
ファイルの script セクションに以下を追加します。
# Get an oauth access token using the client credentials, parsing out the token with jq.
- apt-get update && apt-get install -y curl jq
- >
export access_token=$(curl -s -X POST -u "${CLIENT_ID}:${CLIENT_SECRET}" \
https://bitbucket.org/site/oauth2/access_token \
-d grant_type=client_credentials -d scopes="repository"| jq --raw-output '.access_token')
# Configure git to use the oauth token.
- git remote set-url origin "https://x-token-auth:${access_token}@bitbucket.org/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}"
# Make changes and commit back.
- echo "Made a change in build ${BITBUCKET_BUILD_NUMBER}" >> changes.txt
- git add changes.txt
- git commit -m "[skip ci] Updating changes.txt with latest build number."
- git push
使用例を OAuth のサンプル リポジトリで確認できます。
Bitbucket Pipelines で管理される SSH キー ペア
Bitbucket で、リポジトリで [設定] をクリックします。
[Pipelines] で、[SSH キー] > [キーを生成] をクリックします。
公開キーをクリップボードにコピーします。
左下のアバターで、[Bitbucket 設定] > [SSH キー] をクリックします。
[キーを追加] をクリックして公開キーを貼り付け、名前と説明を追加します。
bitbucket-pipeline.yml
ファイルで ssh origin を使用するように git を構成する必要があります。次のコマンドを実行します。
git remote set-url origin ${BITBUCKET_GIT_SSH_ORIGIN}
これで、追加構成を行うことなく、パイプライン内で SSH 操作を実行できるようになりました。
https://bitbucket.org/bitbucketpipelines/git-auth-ssh-configured-in-ui/
変数で管理される SSH キー ペア
この方法は、これまでの手順で SSH キーを構成していない場合にのみ、すぐに使用できる状態で提供されます。
コマンド ラインで、公開/非公開のキー ペアを生成します。
ssh-keygen
Bitbucket UI でアカウントに公開鍵を追加し、アバター > [個人設定] > [SSH キー] をクリックします。
秘密鍵を Base64 でエンコードし、パイプライン変数として追加します。
cat <keyfile> | base64 -d -w 0 | pbcopy
bitbucket-pipeline.yml
スクリプトで次のコマンドを実行し、ssh origin を使用するように git を構成して、ssh 非公開キーを適切な場所にコピーします。
- git remote set-url origin ${BITBUCKET_GIT_SSH_ORIGIN}
- echo $PRIVATE_KEY > ~/.ssh/id_rsa.tmp
- base64 -d ~/.ssh/id_rsa.tmp > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
サンプル リポジトリ: https://bitbucket.org/bitbucketpipelines/git-auth-ssh-using-variables
アプリの秘密鍵
Bitbucket で、左下のアバターから [個人設定] > [アプリ パスワード] > [アプリ パスワードを作成] の順にクリックします。
アプリ パスワードとパイプラインのパスワードをセキュアな変数として生成します。
bitbucket-pipelines.yml
ファイルで、Bitbucket のユーザー名とアプリ パスワードで認証するようにリモート URL を変更し、git でアプリ パスワードを使用するように構成します。
git remote set-url origin https://<your username>:${APP_SECRET}@bitbucket.org/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}
サンプル リポジトリ: https://bitbucket.org/bitbucketpipelines/git-auth-appsecret