Bamboo를 사용하다보면 build plan 및 deployment 에서 script task를 자주 사용하게 됩니다.

해당 script task를 자주 사용하다보면 각 Build Plan 혹은 Deployment에 중복된 script이 추가되는 경우도 있고 향후 관리가 어려워져 이를 저장소를 이용하여 관리하면 어떨까 하는 생각이 들게 됩니다. 하여 Bitbucket을 통해 관리하고 업데이트하는 방법에 대해 알아보고자 합니다.

간단하게 설명하자면 먼저 Bamboo script 작성한후 이를 Bitbucket(git) Repository에 등록하고 등록된 repository를 bamboo plan 및 deployment가 실행될 때마다 불러와 실행하게 합니다.

이와 같이 수행하게되면 각 build plan 및 deployment에 매번 들어가 script를 수정하는 번거로움이 줄게 되고 좀더 합리적인 관리가 이루어지게 됩니다.

이제부터 실제 build plan 및 deployment에서 어떻게 사용하면 되는지 예제를 통해 알아보도록 하겠습니다.

Bamboo build plan 내에 Bamboo script 관리


먼저 Build Plan에서 bamboo script를 Bitbucket을 통해 관리하는 방법을 알아보겠습니다.

다음과 같이 bitbucket에 해당 script를 repository로 등록하고 저장합니다.

이후 실제 bamboo script이 동작될 Bamboo plan의 Repositories메뉴로 이동하여 앞서 등록 및 저장한 Repository를 추가합니다.

Triggers 메뉴로 이동하여 추가된 build script repository에 대한 trigger 체크박스를 해제합니다.

이유는 build script를 수정한후 이를 push하게 되면 build가 돌수 있기에 필히 체크박스를 해제합니다.

실행될 Bamboo script가 저장된 Repository를 Source Code Checkout task를 추가합니다.

이때, 기존 directory와 구별시키기 위해 Checkout Directory를 별도로 지정합니다.

이제 마지막으로 Script Task를 추가하여 다음과 같이 bamboo script를 실행합니다.

bash bambooscript/bambootestscript.sh

Deployment내의 Bamboo script 관리


Deployment에서 Bamboo의 bitbucket을 통해 관리되는 script를 사용하고자 할 경우 다음과 같은 작업을 통해 사용할 수 있습니다.

먼저 Deployment의 경우 관리자 화면에서 제공하는 Linked repository에서 Repository를 등록해야 합니다.

일반적으로 Bamboo Deployment는 배포수행이 주 작업이 되기에 source checkout을 통한 source 가져오기시에 사용될 repository 등록은 Deployment 내 별도의 메뉴로 제공되지 않습니다.

Global로 사용할 수 있는 Linked repositories에 등록된 repository를 통해 사용이 가능합니다.

위와 같이 앞서 생성하였던 Bambooscript의 repository를 등록합니다.

이후 Deployment에서 Source Code Checkout task를 추가한 뒤

앞서 Linked repositories에서 등록했던 repository를 선택하고 Directory를 추가합니다.

앞서 build plan에서와 동일하게 script task를 추가하고 해당 bamboo script를 실행할수 있게 합니다.

참고로 custom하게 추가해놓은 Bamboo 변수도 아래와 같이 사용가능합니다.

Deployment에서 추가한 username=jacobbaek에 대한 내용이

실제 deploy된 결과의 log상에서 env로 확인해보면 다음과 같이 출력됨을 확인할 수 있습니다.

Script task 내에서 Bamboo variables 사용


Bamboo script를 작성하다보면 Bamboo에서 기본 제공되는 Bamboo variables 혹은 custom하게 추가한 variables를 사용해야 하는 경우가 있습니다.

이때 아래 공식 페이지에서 제공되듯이 ${bamboo.variable} 과 같은 방식으로 사용하면 에러가 발생됩니다.

이와 같은 상황에서는 어떤 방식으로 사용하면 좋을지에 대해 아래에서 알아보도록 하겠습니다.

File

실제 수행될 bamboo script에는 다음과 같은 방식이 bamboo 변수가 선언되어야 합니다.

${bamboo_buildPlanName}

즉,

echo ${bamboo_buildPlanName}

으로 bamboo script를 생성하고 이를 bitbucket에 저장하게 되면 build plan및 deployment에 의해 실행되는 시점에 해당 변수를 불러와 출력할수 있게 됩니다.

실제 build plan 상에서 env 명령어를 통해 확인한 variable list입니다.Build Plan bamboo variables

build	19-Oct-2019 08:00:31	bamboo_repository_10616837_revision_number=765f9549a9d869d44fc74f0811266e54b9c1ad7f
build	19-Oct-2019 08:00:31	bamboo_planRepository_3_branch=release
build	19-Oct-2019 08:00:31	bamboo_planRepository_2_name=samplejavaweb-dev
...
build	19-Oct-2019 08:00:31	bamboo_buildPlanName=JacobProject - JBBUILD1 - Default Job
build	19-Oct-2019 08:00:31	bamboo_planRepository_2_branchDisplayName=dev
build	19-Oct-2019 08:00:31	bamboo_planRepository_branchName=master
...
build	19-Oct-2019 08:00:31	bamboo_capability_host=local
build	19-Oct-2019 08:00:31	bamboo_repository_8388611_git_username=
build	19-Oct-2019 08:00:31	bamboo_planRepository_3_name=samplejavaweb-release
build	19-Oct-2019 08:00:31	PWD=/var/atlassian/application-data/bamboo/xml-data/build-dir/360449/JACOB-BP1-JOB1
build	19-Oct-2019 08:00:31	bamboo_repository_10616838_revision_number=f8094a62d20e10140c140aa9cfcd29470aeceb48
build	19-Oct-2019 08:00:31	bamboo_planRepository_4_type=bbserver
build	19-Oct-2019 08:00:31	bamboo_working_directory=/var/atlassian/application-data/bamboo/xml-data/build-dir/360449/JACOB-BP1-JOB1
build	19-Oct-2019 08:00:31	HOME=/root
...
build	19-Oct-2019 08:00:31	bamboo_buildResultKey=JACOB-BP1-JOB1-30
build	19-Oct-2019 08:00:31	bamboo_repository_11337729_revision_number=b8dc3e5a2fddb44858859e67a4efda7ffe0df05b
build	19-Oct-2019 08:00:31	bamboo_planRepository_2_branchName=dev
build	19-Oct-2019 08:00:31	bamboo_capability_sonar_scanner=/opt/sonarqube/sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner
build	19-Oct-2019 08:00:31	bamboo_build_commandline__1000028=/usr/bin/docker exec 2274a9e3-8c37-4830-94db-01419cc54e7b6782980 /tmp/initialiseContainer.sh
build	19-Oct-2019 08:00:31	bamboo_planRepository_3_branchDisplayName=release
...
build	19-Oct-2019 08:00:31	bamboo_repository_name=bamboo scripts repo
build	19-Oct-2019 08:00:31	bamboo_capability_system_jdk_JDK_1_8_0_172=/opt/atlassian/bamboo/jre
build	19-Oct-2019 08:00:31	bamboo_capability_system_jdk_JDK_1_8=/usr/lib/jvm/java-8-openjdk-amd64
build	19-Oct-2019 08:00:31	bamboo_repository_11337729_git_branch=master
build	19-Oct-2019 08:00:31	bamboo_repository_previous_revision_number=6a8238102bfe444573656977218c129bc9d3c944
build	19-Oct-2019 08:00:31	bamboo_repository_10616838_name=samplejavaweb-release
build	19-Oct-2019 08:00:31	bamboo_plan_storageTag=plan-6782979
build	19-Oct-2019 08:00:31	bamboo_planRepository_username=
build	19-Oct-2019 08:00:31	bamboo_shortJobKey=JOB1
build	19-Oct-2019 08:00:31	bamboo_shortJobName=Default Job
...
build	19-Oct-2019 08:00:31	bamboo_repository_10616837_git_branch=dev
build	19-Oct-2019 08:00:31	bamboo_hg_cache_directory=/var/atlassian/application-data/bamboo/xml-data/build-dir/_hg-repositories-cache
build	19-Oct-2019 08:00:31	bamboo_repository_11337729_name=bamboo scripts repo
build	19-Oct-2019 08:00:31	bamboo_planRepository_1_branch=master
build	19-Oct-2019 08:00:31	bamboo_capability_system_jdk_JDK_1_8_0_181=/usr/lib/jvm/java-8-openjdk-amd64
build	19-Oct-2019 08:00:31	bamboo_buildTimeStamp=2019-10-19T08:00:27.416Z
build	19-Oct-2019 08:00:31	bamboo_planRepository_branchDisplayName=master
build	19-Oct-2019 08:00:31	bamboo_planRepository_1_name=samplejavaweb-master
build	19-Oct-2019 08:00:31	bamboo_planRepository_1_branchName=master

실제 deployment 상에서 env 명령어를 통해 확인한 variable list입니다.

Deployment bamboo variables

build	19-Oct-2019 12:31:18	bamboo_planRepository_3_branch=release
build	19-Oct-2019 12:31:18	bamboo_planRepository_2_name=samplejavaweb-dev
...
build	19-Oct-2019 12:31:18	bamboo_deploy_release=release-16
build	19-Oct-2019 12:31:18	bamboo_capability_system_agent_environment_ec2_instance_type=t2.medium
build	19-Oct-2019 12:31:18	bamboo_planRepository_3_name=samplejavaweb-release
build	19-Oct-2019 12:31:18	bamboo_capability_system_builder_phpunit_PHPUnit_3_7=/opt/phpunit-3.7/phpunit
build	19-Oct-2019 12:31:18	PWD=/home/bamboo/bamboo-agent-home/xml-data/build-dir/7241729-7307265
build	19-Oct-2019 12:31:18	bamboo_capability_system_agent_environment_ebs_optimised=false
build	19-Oct-2019 12:31:18	bamboo_planRepository_4_type=bbserver
build	19-Oct-2019 12:31:18	bamboo_working_directory=/home/bamboo/bamboo-agent-home/xml-data/build-dir/7241729-7307265
build	19-Oct-2019 12:31:18	bamboo_capability_system_builder_grailsBuilder_Grails_2_4=/opt/grails-2.4
build	19-Oct-2019 12:31:18	HOME=/home/bamboo
...
build	19-Oct-2019 12:31:18	bamboo_planName=JacobProject - JBBUILD1
build	19-Oct-2019 12:31:18	MAIL=/var/mail/bamboo
build	19-Oct-2019 12:31:18	bamboo_capability_system_jdk_JDK_1_6=/opt/jdk-6
build	19-Oct-2019 12:31:18	bamboo_capability_system_jdk_JDK_1_7=/opt/jdk-7
build	19-Oct-2019 12:31:18	bamboo_capability_system_jdk_JDK_1_5=/opt/jdk-5
build	19-Oct-2019 12:31:18	bamboo_deploy_environment=Staging
...
build	19-Oct-2019 12:31:18	bamboo_planKey=JACOB-BP1
build	19-Oct-2019 12:31:18	bamboo_planRepository_1_username=
build	19-Oct-2019 12:31:18	LOGNAME=bamboo
build	19-Oct-2019 12:31:18	bamboo_deploy_project=DeployJacob
build	19-Oct-2019 12:31:18	bamboo_planRepository_branch=master
build	19-Oct-2019 12:31:18	XDG_RUNTIME_DIR=/run/user/500
build	19-Oct-2019 12:31:18	bamboo_buildNumber=33
...

Inline

inline 방식은 위에서 설명한 변수를 직접 사용하는 방식과 아래와 같이 parameter로 사용하는 방식까지 두가지를 사용할 수 있습니다.

다음과 같이 Script Task내에 source code checkout으로 불러온 script파일에 parameter를 추가로 전달하도록 합니다.

bash bambooscript/bambootestscript.sh ${bamboo.buildKey}

위와 같이 Script Task내에 inline으로 선언하고 실제 실행될 bamboo script에서는 다음과 같이 parameter를 전달받도록 하여 사용할 수 있습니다.

#!/bin/bash

echo $1

참고사이트

참고


혹 권한문제가 있을수 있으니 chmod +x bamboo*script.sh 와 같이 권한을 추가해주기를 권장드리며 windows의 경우 git update-index –chmod=+x bamboo*script.sh 와 같은 명령을 통해 실행 권한을 추가하기를 권장드립니다.

오픈소스컨설팅의 마스코트, 열린이입니다! :)

Leave a Reply

Your email address will not be published. Required fields are marked *