CI/CD ツールの一つである TeamCity のインストール手順等を記載します。
こちらからダウンロードします。.tar.gz
をダウンロードした場合は以下のように起動します。
Tomcat を起動するために Java8 が必要なため、インストールします。
sudo yum install java-1.8.0-openjdk-devel
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
解凍して起動します。
tar zxvf TeamCity-2017.2.4.tar.gz
cd TeamCity/
bin/runAll.sh start
jps -m
ポート番号を確認して HTTP でアクセスします。
sudo netstat -ltnp
curl http://192.168.56.10:8111/
DB を選択します。動作確認等を目的としている場合は外部 DB を用意する必要はなく Java の HSQLDB が利用できます。
Administrator アカウントを作成します。あるいは、teamcity-server.log に記載されているトークンを用いて super user でログインすることもできます。
[username@localhost TeamCity]$ grep 'token' logs/teamcity-server.log | tail -1
[2018-06-11 14:26:12,393] INFO - jetbrains.buildServer.SERVER - Super user authentication token: "6809741467420593932". To login as Super user use an empty username and this token as a password on the login page.
Jenkins のプロジェクト (ジョブ) と異なり、TeamCity のプロジェクトは複数の Build Configuration を持ちます。ビルドで実行するシェルコマンド等は、Build Configuration 内の Build Step に記載します。
ビルド設定 (Build script) 内で TeamCity と連携することができます。標準出力に特定のフォーマットで連携用の文字列を出力します。例えば、Build step で Command Line
を選択している場合は以下のようにしてエラーメッセージを出力できます。
echo "-----"
echo "##teamcity[message text='Hello world' errorDetails='xxxx' status='ERROR']"
echo "-----"
Run した後に Build Log を確認すると以下のようなメッセージが確認できます。
[19:47:08]The build is removed from the queue to be prepared for the start
[19:47:08]Collecting changes in 1 VCS root
[19:47:08]Starting the build on the agent Default Agent
[19:47:08]Clearing temporary directory: /home/username/TeamCity/buildAgent/temp/buildTmp
[19:47:08]Free disk space requirement
[19:47:08]Publishing internal artifacts
[19:47:08]Using vcs information from agent file: c72794c3eb687f22.xml
[19:47:08]Checkout directory: /home/username/TeamCity/buildAgent/work/c72794c3eb687f22
[19:47:08]Updating sources: auto checkout (on server)
[19:47:09]Step 1/1: my-step-1 (Command Line)
[19:47:09][Step 1/1] Starting: /home/username/TeamCity/buildAgent/temp/agentTmp/custom_script8069562897406100923
[19:47:09][Step 1/1] in directory: /home/username/TeamCity/buildAgent/work/c72794c3eb687f22
[19:47:09][Step 1/1] -----
[19:47:09]
[Step 1/1] Hello world
xxxx
[19:47:09][Step 1/1] -----
[19:47:09][Step 1/1] Process exited with code 0
[19:47:09]Publishing internal artifacts
[19:47:09]Build finished
buildStatisticValue 用いて、グラフを生成できます。
echo "##teamcity[buildStatisticValue key='mykey1' value='123']"
Build Configuration の Statistics タブを開いて Add new chart することでグラフを追加できます。
以下はビルドを三回実行した後のグラフです。
また、ビルド結果詳細画面の Parameters タブ内の Reported statistic values から結果を確認できます。
TeamCity の REST API が利用できます。基本的なドキュメントは存在しますが、詳細は /httpAuth/app/rest
以下のドキュメント用のエンドポイントから取得することになっています。
This documentation is not meant to be comprehensive, but just provide some initial knowledge useful for using the API.
https://confluence.jetbrains.com/display/TCD10/REST+API
TeamCity にログインした状態で、以下の URL を開きます。
http://192.168.56.10:8111/httpAuth/app/rest
http://192.168.56.10:8111/httpAuth/app/rest/server ←エンドポイントをhrefで辿ることができます
http://192.168.56.10:8111/httpAuth/app/rest/application.wadl ←指定可能なリクエストパラメータの情報 (分からないときはここを参照)
また、以下の情報は TeamCity10.x のドキュメント情報をもとにしています。9.x では存在しない機能もいくつか存在するため注意します。
例えば 10.x では Swagger 形式で上記エンドポイントの最後の情報を JSON で取得できます。
http://192.168.56.10:8111/httpAuth/app/rest/swagger.json
また、10.x では $help
を locator に指定することで適宜エンドポイントの使用方法のヘルプを得ることができます。例えば以下のようにヘルプを得ます。
$ curl -sS -XGET -u myuser:mypass -H 'Accept: application/json' 'http://192.168.56.10:8111/httpAuth/app/rest/server' | jq . | grep 'agents' -A3
"agents": {
"href": "/httpAuth/app/rest/agents"
},
$ curl -sS -XGET -u myuser:mypass -H 'Accept: application/json' 'http://192.168.56.10:8111/httpAuth/app/rest/agents' | jq .
{
"count": 1,
"href": "/httpAuth/app/rest/agents",
"agent": [
{
"id": 1,
"name": "Default Agent",
"typeId": 1,
"href": "/httpAuth/app/rest/agents/id:1",
"webUrl": "http://192.168.56.10:8111/agentDetails.html?id=1&realAgentName=Default%20Agent&agentTypeId=1"
}
]
}
$ curl -sS -XGET -u myuser:mypass -H 'Accept: application/json' 'http://192.168.56.10:8111/httpAuth/app/rest/agents/$help'
Responding with error, status code: 400 (Bad Request).
Details: jetbrains.buildServer.server.rest.errors.LocatorProcessException: Locator help requested: Supported dimensions are: [id, name, connected, authorized, enabled, parameter, ip, pool, build, compatible, $singleValue, start, count]
Invalid request. Check locator is specified correctly.
個人的に都度利用する場合は TeamCity のログイン用 ID とパスワードを利用して認証することができます。そうではなく、ビルド時に API を利用するためには、以下のような記法を用います。
%system.teamcity.auth.userId%
ビルド時にのみ有効なユーザ ID に置換されます%system.teamcity.auth.password%
ビルド時にのみ有効なパスワードに置換されますその他にも %
で利用可能な変数は存在しており、適宜組み合わせます。
%teamcity.serverUrl%
ビルドしている TeamCity の URL%teamcity.build.id%
ビルド番号設定例
curl -sS -XGET -u '%system.teamcity.auth.userId%:%system.teamcity.auth.password%' -H 'Accept: application/json' '%teamcity.serverUrl%/httpAuth/app/rest/builds/id:%teamcity.build.id%'