Skip to content

Latest commit

 

History

History
168 lines (116 loc) · 7.3 KB

README.md

File metadata and controls

168 lines (116 loc) · 7.3 KB

Build Status SonarCloud Status

TeamCity Cloud Openstack plugin

Download

Releases Snapshot (last) Compatibility
Download Download TeamCity 10+

Agent Configuration

  1. create one or more Openstack machines
  2. install a standard TeamCity build agent on them, you only need to fill TEAMCITY_SERVER_URL WARNING: you shouldn't start build agent while preparing image
  3. create images from machines with installed agent.

Server Configuration

Fill cloud config with your openstack-instance parameters. Configuration example:

Once you have created a cloud profile in TeamCity with one or several images, TeamCity does a test start for all the new images to discover the environment of the build agents configured on them. If for a queued build there are no regular non-cloud agents available, TeamCity will find a matching cloud image with a compatible agent and start a new instance for the image. After that, a virtual agent acts as a regular agent. You can specify idle time on the agent cloud profile, after which the instance should be terminated or stopped, in case you have an EBS-based instance.

Agent images YAML parameters

Property Required Description
image true Image, ex: ubuntu_16.04
flavor true Flavor, ex: m1.medium
network true Network, ex: VLAN
security_group true Security group, ex: default
key_pair false Key pair, ex: my-key ; required for SSH connection on created instances (like TeamCity Agent Push feature)
auto_floating_ip false Boolean (false by default) for floating ip association ; first from pool used
user_script false Script executed on instance start
availability_zone false Region for server instance (if not the global configured)

OpenStack v2 Identity

The Identity defines the tenant/project and username, like: tenant:user

OpenStack v3 Identity

The Identity defines at minimum the tenant and user informations, but could in addition defines the domain(s) of each items. In this case, only project-scope is supported.

The Identity is a 2-4 blocks string in this order: [domain_tenant:]tenant:[domain_user:]user (Warning: Priority given to domain_user for a 3 blocks strings).

Samples

Below some samples from Identity field to JSon produced on https://openstack.hostname.com/v3/auth/tokens URL.

myTenant:foo
{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"foo","domain":{},"password":"***"}}},"scope":{"project":{"name":"myTenant","domain":{}}}}}
myTenant:ldap:foo

NB: domain_user is used for both domains.

{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"foo","domain":{"name":"ldap"},"password":"***"}}},"scope":{"project":{"name":"myTenant","domain":{"name":"ldap"}}}}}
myTenantDomain:myTenant:ldap:foo
{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"foo","domain":{"name":"ldap"},"password":"***"}}},"scope":{"project":{"name":"myTenant","domain":{"name":"myTenantDomain"}}}}}

Update status and restore instances delays

Some properties can be overridden to customize default plugin behavior, in internal.properties or TeamCity UI (Administration > Diagnostics > Internal Properties).

# Delay (in seconds) to execute recurrent instances update status
openstack.status.delay = 10

# Delay (in seconds) to execute first instances update status, after image profile creation or update
openstack.status.initial = 5

# Delay (in seconds) to execute restore instances, after image profile creation or update
openstack.restore.delay = 1

Usage

Use Openstack virtual agents as regular build agents

Metadata disable

With this plugin, any TeamCity agent on an Openstack virtual machine retrieves its information from http://169.254.169.254/openstack/latest/meta_data.json (uuid, name, user datas).

If you want disable this metadata usage, please add in agent configuration file (buildAgent.properties):

clouds.openstack.metadata.disable = true

This usage is mainly designed for instantiate some TeamCity agent(s) on an Openstack virtual machine as a classic way (name defined in configuration file, ...), without they are in cloud profile.

Build and Tests

  1. clone current repository to your local computer

  2. Provides 4 test files in server classpath (ex: cloud-openstack-server/src/test/resources) with content:

# File: test.v3.properties
test.url=https://openstack.company.com/v3
test.identity=domain_tenant:tenant:domain_user:user
test.password=foobar
test.region=region1
# File: test.v3.yml
openstack-test-teamcity-plugin:
  image: anyImage
  flavor: m1.small
  network: networkProviderName
  security_group: default
  key_pair: yourKey
# File: test.v2.properties
test.url=https://openstack.company.com/v2.0
test.identity=tenant:user
test.password=foobar
test.region=region1
# File: test.v2.yml
openstack-test-teamcity-plugin:
  image: anyImage
  flavor: m1.small
  network: networkProviderName
  security_group: default
  key_pair: yourKey
  1. run mvn clean package (if OpenStack test endpoint requires trustStore certificate not in JVM used for test, add -Djavax.net.ssl.trustStore=/path/to/cacerts)

  2. install resulted cloud-openstack.zip plugin file to TeamCity server

Release process

Execute locally:

# git clone and provide test files (see previous "Build and Tests" section)
git fetch origin
git reset --hard origin/master
mvn -B clean release:clean release:prepare -Dusername=yourGitHubLogin -Dpassword=yourGitHubPasswordOrToken

And TeamCity Release build will be executed.