JonDoe297
JonDoe297

Reputation: 1721

Drone replacing environment variables with empty strings

Something happened with my Drone configuration. It's not finding the environment variables since today. Until few days ago, I could run a pipeline, but today I can't.

This is the step into the pipeline:

pipeline: 
    [...]
    sdk:
        image: mycompany/swagger-codegen:latest
        environment:
            - API_SWAGGER_JSON_URL=http://api.mycompany.biz:9000/v1/swagger.json
            - API_PACKAGE=com.mycompany.api
            - API_GROUP_ID=com.mycompany.api
            - API_ARTIFACT_ID=sdk
            - API_VERSION=0.1-SNAPSHOT
        when:
            branch: master
        commands:
            - java -jar /usr/lib/swagger/swagger-codegen-cli.jar generate
                -i ${API_SWAGGER_JSON_URL}
                --api-package ${API_PACKAGE}
                --invoker-package ${API_PACKAGE}.client
                --model-package ${API_PACKAGE}.client.model
                --group-id ${API_GROUP_ID}
                --artifact-id ${API_ARTIFACT_ID}
                --artifact-version ${API_VERSION}
                -l java
                -o ./swagger-codegen-source
            - etc.

And this is what I get

+ java -jar /usr/lib/swagger/swagger-codegen-cli.jar generate -i --api-package --invoker-package .client --model-package .client.model --group-id --artifact-id --artifact-version -l java -o ./swagger-codegen-source
Exception in thread "main" io.airlift.airline.ParseArgumentsUnexpectedException: Found unexpected parameters: [java]
    at io.airlift.airline.Cli.validate(Cli.java:148)
    at io.airlift.airline.Cli.parse(Cli.java:116)
    at io.airlift.airline.Cli.parse(Cli.java:97)
    at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:36)

Look at the command. Every environment variable was substituted by an empty string. Am I doing something wrong?

Upvotes: 3

Views: 6638

Answers (1)

Brad Rydzewski
Brad Rydzewski

Reputation: 2563

You should use $variable or $${variable} instead of ${variable}

This is because drone interpolates runtime variables [1] into the yaml using ${variable} syntax. This behavior is similar to docker-compose which drone uses as a baseline for functionality and syntax.

[1] http://docs.drone.io/environment/
[2] http://docs.drone.io/secrets-not-working/#variable-expansion

Upvotes: 7

Related Questions