CLI release notes
- 2.11.0 - 2019-05-16
- 2.10.0 - 2018-12-17
- 2.9.0 - 2018-11-13
- 2.8.0 - 2018-10-01
- 2.6.0 - 2018-05-16
- 2.5.1 - 2018-04-26
- 2.5.0 - 2018-04-23
- 2.4.1 - 2018-03-14
- 2.4.0 - 2018-02-05
- 2.3.0 - 2018-01-30
- 2.2.1 - 2018-01-26
- 2.2.0 - 2018-01-23
Missing versions only improved the integration with our hosted platform and have no user facing changes / bug fixes.
Slight change to step naming. Duplicate naming of steps is supported. The output of duplicate step names will lead to a bracketed counter. i.e. Two steps name foo will be presented as foo and foo (2). This kind of counter based de-duplication is only enforced between sibling steps. Two steps name foo which are not siblings will remain named foo.
Support for leveraging identitytoken field in docker config. Docker config generators which produce config containing an identity token rather than a username and password will authenticate successfully with the target repository. Prior to this change such authentication flows would result in an authentication failure. This reinstates our ability to support platforms such as IBM Cloud (see https://github.com/codeship-library/ibm-bluemix-utilities). === Changed
Building Jet with Go 1.11 == 2.7.0 - 2018-07-18
Caching of Docker login authentication between steps. Logins provided in the form of either an encrypted_dockercfg_path or dockercfg_service directive, will be cached for up to 10 minutes. This will ensure we don’t exhaustively make calls to Docker login authentication providers. It also improves our ability to collapse concurrent builds of services to a single build call, when creating services which rely on these directives. Print warning for services that use links. For more information please see Deprecated keys for more info.
depends_on service directive. Now with support for the depends_on key in the codeship-services.yml. This behaves similarly to links, in the sense that it describes the dependency of one service to another. The difference is that it does not support any kind of additional networking changes. The legacy links directive supported network aliasing and “service discovery” environment variables. These are now not necessary as each service is discoverable via DNS using it’s service name as the address.
server: image: python command: "python3 -m http.server" app: build: . command: "curl server:8000" depends_on: - server
The above example is all that is required from a dependency perspective, for a service app to boot and talk to a dependent service server over the network via DNS.
jet update command to allow Jet to update itself to the most recent version == 2.1.0 - 2018-01-16
jet cleanup command for removing resources left behind by previous jet commands. For example, when the --no-remove flag is used it leaves containers and networks around. The cleanup subcommand will remove these Docker resources. jet validate command to validate codeship-services.yml and codeship-steps.yml files == 2.0.1 - 2018-01-12
Deprecation warnings now always show as yellow in CLI === Fixed
Require both version and services top-level keys to be present for services files to be seen as versioned. Ensure environment variables describing --link port mappings are ordered. Such that the mapping <alias>_PORT always contains the lowest port mapping described. As per Docker’s legacy links spec. Skip push steps by default in CLI == 2.0.0 - 2018-01-08
Updates to jet cli to improve final state messaging The jet command now uses an appropriate color and symbol when a step finishes to represent the steps final state.
Updating to Docker API 1.29 (17.05-ce) You can now use multi-stage builds with the Jet CLI, as well as build arguments in the FROM instruction in your Dockerfile.
Full stops in step and service names.
service and step names can now contain full stops. For example, // in codeship-services.yml golang.service: image: golang
\/\/ in codeship-steps.yml step.one: service: golang.service command: go run main.go
This version includes a deprecation warning for mounting volumes that don’t exist. Also, it includes a warning a warning for mounting volumes via absolute paths. Volumes must exist and be mounted via relative path. See Using volumes for more information.
You can now define a set of steps to be executed when any run, push or group step fails. This will allow users to define recovery options when steps do fail. Any time a regular step fails, the build will fail regardless of whether the resulting failure steps fail or succeed. You can also define recursive failure pipelines for steps that are part of a failure pipeline themselves. For more information see the CloudBees CodeShip Documentation on Failure Pipelines.
In codeship-services.yml, you can now declare build arguments to be consumed at image buildtime. Check out Build arguments.
Jet can now handle parsing all services indented in a services section of the yml/json CodeShip services file. Configurations with services indented under a services section will be treated the same as configurations where all services are defined on the top level.
In your codeship-services.yml file, you can now specify a context key that contains a directory with a Dockerfile. This is identical to the existing path key but more in line with Docker’s naming conventions. The path key will still be supported. Note: context must contain a directory, not a URL to a git repository.
This release updates how Jet catches circular dependecy issues to account for aliased links and volume_from entries. With this in place Jet will correctly error immediately after detecting a circular service dependency through links or volumes_from when an alias us used for the link or volume reference.
In a recent change we added validation requiring an “=” in all environment variables. We are removing this check but keeping new checks that error if non UTF8 characters are present in environment variables. This should help users detect issues with encrypted environment variables not decrypting as expected.
This change fixes some bugs around how we parse and validate environment. With this change we ensure we correctly parse empy values, strip out comments or blank entries, and error actively on invalid ones.
Stripping blank strings out of Environment Jet will now ignore all blank strings added to environment instead of passing them into the container config. This includes those present if env files and those encrypted.
Jet will now validate environment variables before attempting to start containers. This helps protect against triggering errors in the underlying OCI implementation. Environment variables must contain only valid UTF8 characters and at least one ‘=’.
When using cached services, you can now specify which branch to use as a fallback if no cached image is found for your service. The default fallback branch is master. To override this, add default_cache_branch to your service in the codeship-services.yml file. If no value is present, the cache will fall back to master. Note that caching only works for builds run on our infrastructure and not with the Jet CLI.
If two services use an identical cached image and attempt to load the service in parallel, the first service is responsible for loading it, and other services will wait. Services will also check to see if the image ID is available on the build machine before downloading.
A bug in the AWS SDK for golang did not return the correct error code for S3 HeadObject request errors, which prevented new cached services from falling back to the master cache because an empty error was returned. We’ve updated the SDK to include the bugfix, and updated our internal handling of AWS errors.
This change updates the way cached images are stored and retrieved. Cached images are now imported and exported using Docker’s save and load mechanisms, instead of being pushed and pulled from a registry. For local builds using the Jet CLI, remote caching has been removed. Instead, rely on the local Docker image cache. For more information, see our documentation on Image caching.
The method jet uses to parse urls from image names is now more standardized, allowing all valid url characters to be used in the registry url. “foo-bar.com/myrepo/myimage” will now reference the registry “foo-bar.com”.
Adding support for using services to generate dockercfgs Jet users can now use a service from their codeship-services file to write a custom dockercfg, or use a secondary authentication method to unlock docker credentials.
This only affects non-ci jet runs. If the ci-branch flag is not specified by the user, then “master” is assumed as the cache source. This change ensures that if the branch is not provided then the blank tag is not pulled, or pushed once the image has been built.
This change fixes several bugs around add_docker. You can now use a local Docker socket and it will be mounted into the container. This change also stops converting “tcp” host URLs to “https” when TLS is being used as this is no longer supported by Docker.
This change ensures that jet honors termination signals during builds and pulls. The relevant build and pull will still continue, however jet will not build, pull or run any further services, and exit.
Fixing cleanup bugs This change fixes some issues with how jet cleans up containers when shutting down and ignores container not found errors when trying to destroy containers.
Cache pulls which have registry errors will be ignored since they are triggered in cases by a not found response. Since a cache may not exist for a given build, this can cause false negatives.
Removing error on missing dockercfg credentials This change removes the error raised when no credentials are found for a specific registry. This may not actually be an configuration issue.
This update synchronizes duplicate image pulls to avoid race conditions. Multiple services with the same image will result in a single image pull. Those services will wait for the initial pull to complete.
Fixing duplicate build bug
This update fixes a bug with the synchronization of duplicate image builds. Previously services which depended on an image already being built would immediately continue as soon as a previous, in-progress build was detected
This change extends the pull errors we discard during a cache pull. All pull errors relating to the image not being found are discarded. This change makes that selection process more compatible with different registries.
Updating jet to pull image cache before building
Jet will now determine an image cache to pull and use as a build cache during docker image builds. If an image exists with a tag “codeship-cache-$BRANCH”, it will be pulled and provide faster builds. Jet will also automatically push to this cache when an image is pushed.
The same variables used for Docker image tagging will now be available as environment variables in any containers running steps. We have also extended what variables are available. Here is a complete list:
ProjectID: CI_PROJECT_ID BuildID: CI_BUILD_ID RepoName: CI_REPO_NAME Commit: CI_COMMIT CommitMessage: CI_COMMIT_MESSAGE CommitterName: CI_COMMITTER_NAME CommitterEmail: CI_COMMITTER_EMAIL CommitterUsername: CI_COMMITTER_USERNAME Branch: CI_BRANCH StringTime: CI_STRING_TIME Timestamp: CI_TIMESTAMP Ci: CI (set to true) CiName: CI_NAME (set to codeship)
For tagging within push steps the following variables will also be available, and the resulting template will be stripped of any invalid characters.
StepName ServiceName ImageName Push Retries
We have enabled a simple retry mechanism when pushing docker images. Often simultaneous image pushes cause problems, so when an image push step receives one of several listed errors from the registry, the push will be attempted again. You may see some duplicate logging where push steps ran several times due to registry errors.
Jet now comes in two flavours, statically linked and dynamically linked. With the dynamic version you can take advantage of local network resources like .local DNS entries. The statically linked version will have a much better time running in reduced environments like scratch containers.
Enforcing shared services
Each step will now have one instance of a service, shared via the compose specification listed in your services files. Previously this created one container instance for each service using that dependency.
Fixing container naming bug
Invalid characters are now stripped out of auto-generated container names
Capturing more errors
Jet will also pick up link container creation errors
Jet now builds missing images when pushing and you no longer need to run dummy commands to force services to build in order to push them
Jet reads services/compose file more in line with docker-compose.
Previously in relation to service Dockerfile paths and the build declaration jet and docker-compose would differ. docker-compose would allow you to specify a context directory for the entire build, not just the location of the Dockerfile, while jet would enforce using the top level directory as the context directory for the entire build.
Now you can specify a context directory for building an image by using the build: custom_directory tag in your services file, which should match docker-compose in behavior.
Added the image_tag field for push steps. This can be either a hardcoded script or a golang Template object referencing a number of variables. Please see the push steps documentation for the available variables.
Fixed an internal bug with the integration for the hosted beta on codeship.com == 0.3.5
Fixed a bug with labels not being parsed correctly.
Changed how images are built. We’ll use the project directory as the build context, instead of the Dockerfile directory.