Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
3ebd29b5
Commit
3ebd29b5
authored
Mar 10, 2017
by
Z.J. van de Weg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Futher rename the CI variables
parent
68e64a5b
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
99 additions
and
99 deletions
+99
-99
.gitlab-ci.yml
.gitlab-ci.yml
+6
-6
config/initializers/rspec_profiling.rb
config/initializers/rspec_profiling.rb
+1
-1
doc/ci/docker/using_docker_build.md
doc/ci/docker/using_docker_build.md
+7
-7
doc/ci/environments.md
doc/ci/environments.md
+19
-19
doc/ci/review_apps/index.md
doc/ci/review_apps/index.md
+1
-1
doc/ci/variables/README.md
doc/ci/variables/README.md
+26
-26
doc/ci/yaml/README.md
doc/ci/yaml/README.md
+13
-13
doc/user/project/new_ci_build_permissions_model.md
doc/user/project/new_ci_build_permissions_model.md
+2
-2
lib/tasks/gitlab/dev.rake
lib/tasks/gitlab/dev.rake
+1
-1
spec/lib/expand_variables_spec.rb
spec/lib/expand_variables_spec.rb
+2
-2
spec/lib/gitlab/ci/config/entry/environment_spec.rb
spec/lib/gitlab/ci/config/entry/environment_spec.rb
+2
-2
spec/models/environment_spec.rb
spec/models/environment_spec.rb
+1
-1
spec/requests/api/runner_spec.rb
spec/requests/api/runner_spec.rb
+5
-5
spec/requests/ci/api/builds_spec.rb
spec/requests/ci/api/builds_spec.rb
+5
-5
spec/services/ci/create_pipeline_service_spec.rb
spec/services/ci/create_pipeline_service_spec.rb
+1
-1
spec/services/create_deployment_service_spec.rb
spec/services/create_deployment_service_spec.rb
+4
-4
spec/simplecov_env.rb
spec/simplecov_env.rb
+3
-3
No files found.
.gitlab-ci.yml
View file @
3ebd29b5
...
@@ -58,7 +58,7 @@ stages:
...
@@ -58,7 +58,7 @@ stages:
<<
:
*dedicated-runner
<<
:
*dedicated-runner
<<
:
*use-db
<<
:
*use-db
script
:
script
:
-
JOB_NAME=( $CI_
BUILD
_NAME )
-
JOB_NAME=( $CI_
JOB
_NAME )
-
export CI_NODE_INDEX=${JOB_NAME[1]}
-
export CI_NODE_INDEX=${JOB_NAME[1]}
-
export CI_NODE_TOTAL=${JOB_NAME[2]}
-
export CI_NODE_TOTAL=${JOB_NAME[2]}
-
export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
-
export KNAPSACK_REPORT_PATH=knapsack/rspec_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
...
@@ -78,7 +78,7 @@ stages:
...
@@ -78,7 +78,7 @@ stages:
<<
:
*dedicated-runner
<<
:
*dedicated-runner
<<
:
*use-db
<<
:
*use-db
script
:
script
:
-
JOB_NAME=( $CI_
BUILD
_NAME )
-
JOB_NAME=( $CI_
JOB
_NAME )
-
export CI_NODE_INDEX=${JOB_NAME[1]}
-
export CI_NODE_INDEX=${JOB_NAME[1]}
-
export CI_NODE_TOTAL=${JOB_NAME[2]}
-
export CI_NODE_TOTAL=${JOB_NAME[2]}
-
export KNAPSACK_REPORT_PATH=knapsack/spinach_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
-
export KNAPSACK_REPORT_PATH=knapsack/spinach_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
...
@@ -180,7 +180,7 @@ spinach 9 10: *spinach-knapsack
...
@@ -180,7 +180,7 @@ spinach 9 10: *spinach-knapsack
<<
:
*dedicated-runner
<<
:
*dedicated-runner
stage
:
test
stage
:
test
script
:
script
:
-
bundle exec $CI_
BUILD
_NAME
-
bundle exec $CI_
JOB
_NAME
rubocop
:
rubocop
:
<<
:
*ruby-static-analysis
<<
:
*ruby-static-analysis
...
@@ -211,7 +211,7 @@ rake ee_compat_check:
...
@@ -211,7 +211,7 @@ rake ee_compat_check:
-
ee_compat_check/repo/
-
ee_compat_check/repo/
-
vendor/ruby
-
vendor/ruby
artifacts
:
artifacts
:
name
:
"
${CI_
BUILD_NAME}_${CI_BUILD_REF_NAME}_${CI_BUILD
_REF}"
name
:
"
${CI_
JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT
_REF}"
when
:
on_failure
when
:
on_failure
expire_in
:
10d
expire_in
:
10d
paths
:
paths
:
...
@@ -330,7 +330,7 @@ migration paths:
...
@@ -330,7 +330,7 @@ migration paths:
-
sed -i 's/localhost/redis/g' config/resque.yml
-
sed -i 's/localhost/redis/g' config/resque.yml
-
bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
-
bundle install --without postgres production --jobs $(nproc) $FLAGS --retry=3
-
bundle exec rake db:drop db:create db:schema:load db:seed_fu
-
bundle exec rake db:drop db:create db:schema:load db:seed_fu
-
git checkout $CI_
BUILD
_REF
-
git checkout $CI_
COMMIT
_REF
-
source scripts/prepare_build.sh
-
source scripts/prepare_build.sh
-
bundle exec rake db:migrate
-
bundle exec rake db:migrate
...
@@ -402,7 +402,7 @@ notify:slack:
...
@@ -402,7 +402,7 @@ notify:slack:
SETUP_DB
:
"
false"
SETUP_DB
:
"
false"
USE_BUNDLE_INSTALL
:
"
false"
USE_BUNDLE_INSTALL
:
"
false"
script
:
script
:
-
./scripts/notify_slack.sh "#development" "Build on \`$CI_
BUILD_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_BUILD
_REF"/pipelines>"
-
./scripts/notify_slack.sh "#development" "Build on \`$CI_
COMMIT_REF_NAME\` failed! Commit \`$(git log -1 --oneline)\` See <https://gitlab.com/gitlab-org/$(basename "$PWD")/commit/"$CI_COMMIT
_REF"/pipelines>"
when
:
on_failure
when
:
on_failure
only
:
only
:
-
master@gitlab-org/gitlab-ce
-
master@gitlab-org/gitlab-ce
...
...
config/initializers/rspec_profiling.rb
View file @
3ebd29b5
...
@@ -7,7 +7,7 @@ module RspecProfilingExt
...
@@ -7,7 +7,7 @@ module RspecProfilingExt
module
Git
module
Git
def
branch
def
branch
ENV
[
'CI_
BUILD
_REF_NAME'
]
||
super
ENV
[
'CI_
COMMIT
_REF_NAME'
]
||
super
end
end
end
end
...
...
doc/ci/docker/using_docker_build.md
View file @
3ebd29b5
...
@@ -298,14 +298,14 @@ could look like:
...
@@ -298,14 +298,14 @@ could look like:
-
docker:dind
-
docker:dind
stage
:
build
stage
:
build
script
:
script
:
-
docker login -u gitlab-ci-token -p $CI_
BUILD
_TOKEN registry.example.com
-
docker login -u gitlab-ci-token -p $CI_
JOB
_TOKEN registry.example.com
-
docker build -t registry.example.com/group/project:latest .
-
docker build -t registry.example.com/group/project:latest .
-
docker push registry.example.com/group/project:latest
-
docker push registry.example.com/group/project:latest
```
```
You have to use the special
`gitlab-ci-token`
user created for you in order to
You have to use the special
`gitlab-ci-token`
user created for you in order to
push to the Registry connected to your project. Its password is provided in the
push to the Registry connected to your project. Its password is provided in the
`$CI_
BUILD
_TOKEN`
variable. This allows you to automate building and deployment
`$CI_
JOB
_TOKEN`
variable. This allows you to automate building and deployment
of your Docker images.
of your Docker images.
You can also make use of
[
other variables
](
../variables/README.md
)
to avoid hardcoding:
You can also make use of
[
other variables
](
../variables/README.md
)
to avoid hardcoding:
...
@@ -315,10 +315,10 @@ services:
...
@@ -315,10 +315,10 @@ services:
-
docker:dind
-
docker:dind
variables
:
variables
:
IMAGE_TAG
:
$CI_REGISTRY_IMAGE:$CI_
BUILD
_REF_NAME
IMAGE_TAG
:
$CI_REGISTRY_IMAGE:$CI_
COMMIT
_REF_NAME
before_script
:
before_script
:
-
docker login -u gitlab-ci-token -p $CI_
BUILD
_TOKEN $CI_REGISTRY
-
docker login -u gitlab-ci-token -p $CI_
COMMIT
_TOKEN $CI_REGISTRY
build
:
build
:
stage
:
build
stage
:
build
...
@@ -328,7 +328,7 @@ build:
...
@@ -328,7 +328,7 @@ build:
```
```
Here,
`$CI_REGISTRY_IMAGE`
would be resolved to the address of the registry tied
Here,
`$CI_REGISTRY_IMAGE`
would be resolved to the address of the registry tied
to this project, and
`$CI_
BUILD
_REF_NAME`
would be resolved to the branch or
to this project, and
`$CI_
COMMIT
_REF_NAME`
would be resolved to the branch or
tag name for this particular job. We also declare our own variable,
`$IMAGE_TAG`
,
tag name for this particular job. We also declare our own variable,
`$IMAGE_TAG`
,
combining the two to save us some typing in the
`script`
section.
combining the two to save us some typing in the
`script`
section.
...
@@ -350,11 +350,11 @@ stages:
...
@@ -350,11 +350,11 @@ stages:
-
deploy
-
deploy
variables
:
variables
:
CONTAINER_TEST_IMAGE
:
registry.example.com/my-group/my-project:$CI_
BUILD
_REF_NAME
CONTAINER_TEST_IMAGE
:
registry.example.com/my-group/my-project:$CI_
COMMIT
_REF_NAME
CONTAINER_RELEASE_IMAGE
:
registry.example.com/my-group/my-project:latest
CONTAINER_RELEASE_IMAGE
:
registry.example.com/my-group/my-project:latest
before_script
:
before_script
:
-
docker login -u gitlab-ci-token -p $CI_
BUILD
_TOKEN registry.example.com
-
docker login -u gitlab-ci-token -p $CI_
JOB
_TOKEN registry.example.com
build
:
build
:
stage
:
build
stage
:
build
...
...
doc/ci/environments.md
View file @
3ebd29b5
...
@@ -295,7 +295,7 @@ deploy_review:
...
@@ -295,7 +295,7 @@ deploy_review:
script
:
script
:
-
echo "Deploy a review app"
-
echo "Deploy a review app"
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
only
:
only
:
-
branches
-
branches
...
@@ -306,22 +306,22 @@ deploy_review:
...
@@ -306,22 +306,22 @@ deploy_review:
Let's break it down in pieces. The job's name is
`deploy_review`
and it runs
Let's break it down in pieces. The job's name is
`deploy_review`
and it runs
on the
`deploy`
stage. The
`script`
at this point is fictional, you'd have to
on the
`deploy`
stage. The
`script`
at this point is fictional, you'd have to
use your own based on your deployment. Then, we set the
`environment`
with the
use your own based on your deployment. Then, we set the
`environment`
with the
`environment:name`
being
`review/$CI_
BUILD
_REF_NAME`
. Now that's an interesting
`environment:name`
being
`review/$CI_
COMMIT
_REF_NAME`
. Now that's an interesting
one. Since the
[
environment name
][
env-name
]
can contain slashes (
`/`
), we can
one. Since the
[
environment name
][
env-name
]
can contain slashes (
`/`
), we can
use this pattern to distinguish between dynamic environments and the regular
use this pattern to distinguish between dynamic environments and the regular
ones.
ones.
So, the first part is
`review`
, followed by a
`/`
and then
`$CI_
BUILD
_REF_NAME`
So, the first part is
`review`
, followed by a
`/`
and then
`$CI_
COMMIT
_REF_NAME`
which takes the value of the branch name. Since
`$CI_
BUILD
_REF_NAME`
itself may
which takes the value of the branch name. Since
`$CI_
COMMIT
_REF_NAME`
itself may
also contain
`/`
, or other characters that would be invalid in a domain name or
also contain
`/`
, or other characters that would be invalid in a domain name or
URL, we use
`$CI_ENVIRONMENT_SLUG`
in the
`environment:url`
so that the
URL, we use
`$CI_ENVIRONMENT_SLUG`
in the
`environment:url`
so that the
environment can get a specific and distinct URL for each branch. In this case,
environment can get a specific and distinct URL for each branch. In this case,
given a
`$CI_
BUILD
_REF_NAME`
of
`100-Do-The-Thing`
, the URL will be something
given a
`$CI_
COMMIT
_REF_NAME`
of
`100-Do-The-Thing`
, the URL will be something
like
`https://100-do-the-4f99a2.example.com`
. Again, the way you set up
like
`https://100-do-the-4f99a2.example.com`
. Again, the way you set up
the web server to serve these requests is based on your setup.
the web server to serve these requests is based on your setup.
You could also use
`$CI_
BUILD
_REF_SLUG`
in
`environment:url`
, e.g.:
You could also use
`$CI_
COMMIT
_REF_SLUG`
in
`environment:url`
, e.g.:
`https://$CI_
BUILD
_REF_SLUG.example.com`
. We use
`$CI_ENVIRONMENT_SLUG`
`https://$CI_
COMMIT
_REF_SLUG.example.com`
. We use
`$CI_ENVIRONMENT_SLUG`
here because it is guaranteed to be unique, but if you're using a workflow like
here because it is guaranteed to be unique, but if you're using a workflow like
[
GitLab Flow
][
gitlab-flow
]
, collisions are very unlikely, and you may prefer
[
GitLab Flow
][
gitlab-flow
]
, collisions are very unlikely, and you may prefer
environment names to be more closely based on the branch name - the example
environment names to be more closely based on the branch name - the example
...
@@ -356,7 +356,7 @@ deploy_review:
...
@@ -356,7 +356,7 @@ deploy_review:
script
:
script
:
-
echo "Deploy a review app"
-
echo "Deploy a review app"
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
only
:
only
:
-
branches
-
branches
...
@@ -387,16 +387,16 @@ deploy_prod:
...
@@ -387,16 +387,16 @@ deploy_prod:
A more realistic example would include copying files to a location where a
A more realistic example would include copying files to a location where a
webserver (NGINX) could then read and serve. The example below will copy the
webserver (NGINX) could then read and serve. The example below will copy the
`public`
directory to
`/srv/nginx/$CI_
BUILD
_REF_SLUG/public`
:
`public`
directory to
`/srv/nginx/$CI_
COMMIT
_REF_SLUG/public`
:
```
yaml
```
yaml
review_app
:
review_app
:
stage
:
deploy
stage
:
deploy
script
:
script
:
-
rsync -av --delete public /srv/nginx/$CI_
BUILD
_REF_SLUG
-
rsync -av --delete public /srv/nginx/$CI_
COMMIT
_REF_SLUG
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
url
:
https://$CI_
BUILD
_REF_SLUG.example.com
url
:
https://$CI_
COMMIT
_REF_SLUG.example.com
```
```
It is assumed that the user has already setup NGINX and GitLab Runner in the
It is assumed that the user has already setup NGINX and GitLab Runner in the
...
@@ -526,7 +526,7 @@ deploy_review:
...
@@ -526,7 +526,7 @@ deploy_review:
script
:
script
:
-
echo "Deploy a review app"
-
echo "Deploy a review app"
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
url
:
https://$CI_ENVIRONMENT_SLUG.example.com
on_stop
:
stop_review
on_stop
:
stop_review
only
:
only
:
...
@@ -542,7 +542,7 @@ stop_review:
...
@@ -542,7 +542,7 @@ stop_review:
-
echo "Remove review app"
-
echo "Remove review app"
when
:
manual
when
:
manual
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
action
:
stop
action
:
stop
```
```
...
@@ -568,13 +568,13 @@ You can read more in the [`.gitlab-ci.yml` reference][onstop].
...
@@ -568,13 +568,13 @@ You can read more in the [`.gitlab-ci.yml` reference][onstop].
As we've seen in the
[
dynamic environments
](
#dynamic-environments
)
, you can
As we've seen in the
[
dynamic environments
](
#dynamic-environments
)
, you can
prepend their name with a word, then followed by a
`/`
and finally the branch
prepend their name with a word, then followed by a
`/`
and finally the branch
name which is automatically defined by the
`CI_
BUILD
_REF_NAME`
variable.
name which is automatically defined by the
`CI_
COMMIT
_REF_NAME`
variable.
In short, environments that are named like
`type/foo`
are presented under a
In short, environments that are named like
`type/foo`
are presented under a
group named
`type`
.
group named
`type`
.
In our minimal example, we name the environments
`review/$CI_
BUILD
_REF_NAME`
In our minimal example, we name the environments
`review/$CI_
COMMIT
_REF_NAME`
where
`$CI_
BUILD
_REF_NAME`
is the branch name:
where
`$CI_
COMMIT
_REF_NAME`
is the branch name:
```
yaml
```
yaml
deploy_review
:
deploy_review
:
...
@@ -582,7 +582,7 @@ deploy_review:
...
@@ -582,7 +582,7 @@ deploy_review:
script
:
script
:
-
echo "Deploy a review app"
-
echo "Deploy a review app"
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
```
```
In that case, if you visit the Environments page, and provided the branches
In that case, if you visit the Environments page, and provided the branches
...
...
doc/ci/review_apps/index.md
View file @
3ebd29b5
...
@@ -80,7 +80,7 @@ The process of adding Review Apps in your workflow would look like:
...
@@ -80,7 +80,7 @@ The process of adding Review Apps in your workflow would look like:
1.
[
Install
][
install-runner
]
and
[
configure
][
conf-runner
]
a Runner that does
1.
[
Install
][
install-runner
]
and
[
configure
][
conf-runner
]
a Runner that does
the deployment.
the deployment.
1.
Set up a job in
`.gitlab-ci.yml`
that uses the predefined
1.
Set up a job in
`.gitlab-ci.yml`
that uses the predefined
[
predefined CI environment variable
][
variables
]
`${CI_
BUILD
_REF_NAME}`
to
[
predefined CI environment variable
][
variables
]
`${CI_
COMMIT
_REF_NAME}`
to
create dynamic environments and restrict it to run only on branches.
create dynamic environments and restrict it to run only on branches.
1.
Optionally set a job that
[
manually stops
][
manual-env
]
the Review Apps.
1.
Optionally set a job that
[
manually stops
][
manual-env
]
the Review Apps.
...
...
doc/ci/variables/README.md
View file @
3ebd29b5
...
@@ -236,18 +236,18 @@ Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-mach
...
@@ -236,18 +236,18 @@ Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-mach
++
CI
=
true
++
CI
=
true
++
export
CI_DEBUG_TRACE
=
false
++
export
CI_DEBUG_TRACE
=
false
++
CI_DEBUG_TRACE
=
false
++
CI_DEBUG_TRACE
=
false
++
export
CI_
BUILD
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
COMMIT
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
BUILD
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
COMMIT
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
BUILD
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
COMMIT
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
BUILD
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
COMMIT
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
BUILD
_REF_NAME
=
master
++
export
CI_
COMMIT
_REF_NAME
=
master
++
CI_
BUILD
_REF_NAME
=
master
++
CI_
COMMIT
_REF_NAME
=
master
++
export
CI_
BUILD
_ID
=
7046507
++
export
CI_
JOB
_ID
=
7046507
++
CI_
BUILD
_ID
=
7046507
++
CI_
JOB
_ID
=
7046507
++
export
CI_
BUILD_REPO
=
https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++
export
CI_
REPOSITORY_URL
=
https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++
CI_
BUILD_REPO
=
https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++
CI_
REPOSITORY_URL
=
https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++
export
CI_
BUILD
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
export
CI_
JOB
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
CI_
BUILD
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
CI_
JOB
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
export
CI_PROJECT_ID
=
1796893
++
export
CI_PROJECT_ID
=
1796893
++
CI_PROJECT_ID
=
1796893
++
CI_PROJECT_ID
=
1796893
++
export
CI_PROJECT_DIR
=
/builds/gitlab-examples/ci-debug-trace
++
export
CI_PROJECT_DIR
=
/builds/gitlab-examples/ci-debug-trace
...
@@ -266,20 +266,20 @@ Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-mach
...
@@ -266,20 +266,20 @@ Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-mach
++
CI
=
true
++
CI
=
true
++
export
GITLAB_CI
=
true
++
export
GITLAB_CI
=
true
++
GITLAB_CI
=
true
++
GITLAB_CI
=
true
++
export
CI_
BUILD
_ID
=
7046507
++
export
CI_
JOB
_ID
=
7046507
++
CI_
BUILD
_ID
=
7046507
++
CI_
JOB
_ID
=
7046507
++
export
CI_
BUILD
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
export
CI_
JOB
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
CI_
BUILD
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
CI_
JOB
_TOKEN
=
xxxxxxxxxxxxxxxxxxxx
++
export
CI_
BUILD
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
COMMIT
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
BUILD
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
COMMIT
_REF
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
BUILD
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
COMMIT
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
BUILD
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
CI_
COMMIT
_BEFORE_SHA
=
dd648b2e48ce6518303b0bb580b2ee32fadaf045
++
export
CI_
BUILD
_REF_NAME
=
master
++
export
CI_
COMMIT
_REF_NAME
=
master
++
CI_
BUILD
_REF_NAME
=
master
++
CI_
COMMIT
_REF_NAME
=
master
++
export
CI_
BUILD
_NAME
=
debug_trace
++
export
CI_
COMMIT
_NAME
=
debug_trace
++
CI_
BUILD
_NAME
=
debug_trace
++
CI_
JOB
_NAME
=
debug_trace
++
export
CI_
BUILD
_STAGE
=
test
++
export
CI_
JOB
_STAGE
=
test
++
CI_
BUILD
_STAGE
=
test
++
CI_
JOB
_STAGE
=
test
++
export
CI_SERVER_NAME
=
GitLab
++
export
CI_SERVER_NAME
=
GitLab
++
CI_SERVER_NAME
=
GitLab
++
CI_SERVER_NAME
=
GitLab
++
export
CI_SERVER_VERSION
=
8.14.3-ee
++
export
CI_SERVER_VERSION
=
8.14.3-ee
...
...
doc/ci/yaml/README.md
View file @
3ebd29b5
...
@@ -153,7 +153,7 @@ thus allowing to fine tune them. Variables can be also defined on a
...
@@ -153,7 +153,7 @@ thus allowing to fine tune them. Variables can be also defined on a
[
job level
](
#job-variables
)
.
[
job level
](
#job-variables
)
.
Except for the user defined variables, there are also the ones set up by the
Except for the user defined variables, there are also the ones set up by the
Runner itself. One example would be
`CI_
BUILD
_REF_NAME`
which has the value of
Runner itself. One example would be
`CI_
COMMIT
_REF_NAME`
which has the value of
the branch or tag name for which project is built. Apart from the variables
the branch or tag name for which project is built. Apart from the variables
you can set in
`.gitlab-ci.yml`
, there are also the so called secret variables
you can set in
`.gitlab-ci.yml`
, there are also the so called secret variables
which can be set in GitLab's UI.
which can be set in GitLab's UI.
...
@@ -252,7 +252,7 @@ To enable per-job caching:
...
@@ -252,7 +252,7 @@ To enable per-job caching:
```
yaml
```
yaml
cache
:
cache
:
key
:
"
$CI_
BUILD
_NAME"
key
:
"
$CI_
JOB
_NAME"
untracked
:
true
untracked
:
true
```
```
...
@@ -260,7 +260,7 @@ To enable per-branch caching:
...
@@ -260,7 +260,7 @@ To enable per-branch caching:
```
yaml
```
yaml
cache
:
cache
:
key
:
"
$CI_
BUILD
_REF_NAME"
key
:
"
$CI_
COMMIT
_REF_NAME"
untracked
:
true
untracked
:
true
```
```
...
@@ -268,7 +268,7 @@ To enable per-job and per-branch caching:
...
@@ -268,7 +268,7 @@ To enable per-job and per-branch caching:
```
yaml
```
yaml
cache
:
cache
:
key
:
"
$CI_
BUILD_NAME/$CI_BUILD
_REF_NAME"
key
:
"
$CI_
JOB_NAME/$CI_COMMIT
_REF_NAME"
untracked
:
true
untracked
:
true
```
```
...
@@ -276,7 +276,7 @@ To enable per-branch and per-stage caching:
...
@@ -276,7 +276,7 @@ To enable per-branch and per-stage caching:
```
yaml
```
yaml
cache
:
cache
:
key
:
"
$CI_
BUILD_STAGE/$CI_BUILD
_REF_NAME"
key
:
"
$CI_
JOB_STAGE/$CI_COMMIT
_REF_NAME"
untracked
:
true
untracked
:
true
```
```
...
@@ -285,7 +285,7 @@ If you use **Windows Batch** to run your shell scripts you need to replace
...
@@ -285,7 +285,7 @@ If you use **Windows Batch** to run your shell scripts you need to replace
```
yaml
```
yaml
cache
:
cache
:
key
:
"
%CI_
BUILD_STAGE%/%CI_BUILD
_REF_NAME%"
key
:
"
%CI_
JOB_STAGE%/%CI_COMMIT
_REF_NAME%"
untracked
:
true
untracked
:
true
```
```
...
@@ -739,12 +739,12 @@ deploy as review app:
...
@@ -739,12 +739,12 @@ deploy as review app:
stage
:
deploy
stage
:
deploy
script
:
make deploy
script
:
make deploy
environment
:
environment
:
name
:
review/$CI_
BUILD
_REF_NAME
name
:
review/$CI_
COMMIT
_REF_NAME
url
:
https://$CI_ENVIRONMENT_SLUG.example.com/
url
:
https://$CI_ENVIRONMENT_SLUG.example.com/
```
```
The
`deploy as review app`
job will be marked as deployment to dynamically
The
`deploy as review app`
job will be marked as deployment to dynamically
create the
`review/$CI_
BUILD_REF_NAME`
environment, where
`$CI_BUILD
_REF_NAME`
create the
`review/$CI_
COMMIT_REF_NAME`
environment, where
`$CI_COMMIT
_REF_NAME`
is an
[
environment variable
][
variables
]
set by the Runner. The
is an
[
environment variable
][
variables
]
set by the Runner. The
`$CI_ENVIRONMENT_SLUG`
variable is based on the environment name, but suitable
`$CI_ENVIRONMENT_SLUG`
variable is based on the environment name, but suitable
for inclusion in URLs. In this case, if the
`deploy as review app`
job was run
for inclusion in URLs. In this case, if the
`deploy as review app`
job was run
...
@@ -850,7 +850,7 @@ To create an archive with a name of the current job:
...
@@ -850,7 +850,7 @@ To create an archive with a name of the current job:
```
yaml
```
yaml
job
:
job
:
artifacts
:
artifacts
:
name
:
"
$CI_
BUILD
_NAME"
name
:
"
$CI_
JOB
_NAME"
```
```
To create an archive with a name of the current branch or tag including only
To create an archive with a name of the current branch or tag including only
...
@@ -859,7 +859,7 @@ the files that are untracked by Git:
...
@@ -859,7 +859,7 @@ the files that are untracked by Git:
```
yaml
```
yaml
job
:
job
:
artifacts
:
artifacts
:
name
:
"
$CI_
BUILD
_REF_NAME"
name
:
"
$CI_
COMMIT
_REF_NAME"
untracked
:
true
untracked
:
true
```
```
...
@@ -869,7 +869,7 @@ tag including only the files that are untracked by Git:
...
@@ -869,7 +869,7 @@ tag including only the files that are untracked by Git:
```
yaml
```
yaml
job
:
job
:
artifacts
:
artifacts
:
name
:
"
${CI_
BUILD_NAME}_${CI_BUILD
_REF_NAME}"
name
:
"
${CI_
JOB_NAME}_${CI_COMMIT
_REF_NAME}"
untracked
:
true
untracked
:
true
```
```
...
@@ -878,7 +878,7 @@ To create an archive with a name of the current [stage](#stages) and branch name
...
@@ -878,7 +878,7 @@ To create an archive with a name of the current [stage](#stages) and branch name
```
yaml
```
yaml
job
:
job
:
artifacts
:
artifacts
:
name
:
"
${CI_
BUILD_STAGE}_${CI_BUILD
_REF_NAME}"
name
:
"
${CI_
JOB_STAGE}_${CI_COMMIT
_REF_NAME}"
untracked
:
true
untracked
:
true
```
```
...
@@ -890,7 +890,7 @@ If you use **Windows Batch** to run your shell scripts you need to replace
...
@@ -890,7 +890,7 @@ If you use **Windows Batch** to run your shell scripts you need to replace
```
yaml
```
yaml
job
:
job
:
artifacts
:
artifacts
:
name
:
"
%CI_
BUILD_STAGE%_%CI_BUILD
_REF_NAME%"
name
:
"
%CI_
JOB_STAGE%_%CI_COMMIT
_REF_NAME%"
untracked
:
true
untracked
:
true
```
```
...
...
doc/user/project/new_ci_build_permissions_model.md
View file @
3ebd29b5
...
@@ -119,7 +119,7 @@ And then the users could also use it in their CI jobs all Docker related
...
@@ -119,7 +119,7 @@ And then the users could also use it in their CI jobs all Docker related
commands to interact with GitLab Container Registry. For example:
commands to interact with GitLab Container Registry. For example:
```
```
docker login -u gitlab-ci-token -p $CI_
BUILD
_TOKEN registry.gitlab.com
docker login -u gitlab-ci-token -p $CI_
JOB
_TOKEN registry.gitlab.com
```
```
Using single token had multiple security implications:
Using single token had multiple security implications:
...
@@ -208,7 +208,7 @@ This is how an example usage can look like:
...
@@ -208,7 +208,7 @@ This is how an example usage can look like:
```
```
test:
test:
script:
script:
- docker login -u gitlab-ci-token -p $CI_
BUILD
_TOKEN $CI_REGISTRY
- docker login -u gitlab-ci-token -p $CI_
JOB
_TOKEN $CI_REGISTRY
- docker pull $CI_REGISTRY/group/other-project:latest
- docker pull $CI_REGISTRY/group/other-project:latest
- docker run $CI_REGISTRY/group/other-project:latest
- docker run $CI_REGISTRY/group/other-project:latest
```
```
...
...
lib/tasks/gitlab/dev.rake
View file @
3ebd29b5
...
@@ -4,7 +4,7 @@ namespace :gitlab do
...
@@ -4,7 +4,7 @@ namespace :gitlab do
task
:ee_compat_check
,
[
:branch
]
=>
:environment
do
|
_
,
args
|
task
:ee_compat_check
,
[
:branch
]
=>
:environment
do
|
_
,
args
|
opts
=
opts
=
if
ENV
[
'CI'
]
if
ENV
[
'CI'
]
{
branch:
ENV
[
'CI_
BUILD
_REF_NAME'
]
}
{
branch:
ENV
[
'CI_
COMMIT
_REF_NAME'
]
}
else
else
unless
args
[
:branch
]
unless
args
[
:branch
]
puts
"Must specify a branch as an argument"
.
color
(
:red
)
puts
"Must specify a branch as an argument"
.
color
(
:red
)
...
...
spec/lib/expand_variables_spec.rb
View file @
3ebd29b5
...
@@ -45,10 +45,10 @@ describe ExpandVariables do
...
@@ -45,10 +45,10 @@ describe ExpandVariables do
{
key:
'variable'
,
value:
'value'
},
{
key:
'variable'
,
value:
'value'
},
{
key:
'variable2'
,
value:
'result'
}
{
key:
'variable2'
,
value:
'result'
}
]
},
]
},
{
value:
'review/$CI_
BUILD
_REF_NAME'
,
{
value:
'review/$CI_
COMMIT
_REF_NAME'
,
result:
'review/feature/add-review-apps'
,
result:
'review/feature/add-review-apps'
,
variables:
[
variables:
[
{
key:
'CI_
BUILD
_REF_NAME'
,
value:
'feature/add-review-apps'
}
{
key:
'CI_
COMMIT
_REF_NAME'
,
value:
'feature/add-review-apps'
}
]
},
]
},
]
]
...
...
spec/lib/gitlab/ci/config/entry/environment_spec.rb
View file @
3ebd29b5
...
@@ -151,8 +151,8 @@ describe Gitlab::Ci::Config::Entry::Environment do
...
@@ -151,8 +151,8 @@ describe Gitlab::Ci::Config::Entry::Environment do
context
'when variables are used for environment'
do
context
'when variables are used for environment'
do
let
(
:config
)
do
let
(
:config
)
do
{
name:
'review/$CI_
BUILD
_REF_NAME'
,
{
name:
'review/$CI_
COMMIT
_REF_NAME'
,
url:
'https://$CI_
BUILD
_REF_NAME.review.gitlab.com'
}
url:
'https://$CI_
COMMIT
_REF_NAME.review.gitlab.com'
}
end
end
describe
'#valid?'
do
describe
'#valid?'
do
...
...
spec/models/environment_spec.rb
View file @
3ebd29b5
...
@@ -239,7 +239,7 @@ describe Environment, models: true do
...
@@ -239,7 +239,7 @@ describe Environment, models: true do
describe
'#actions_for'
do
describe
'#actions_for'
do
let
(
:deployment
)
{
create
(
:deployment
,
environment:
environment
)
}
let
(
:deployment
)
{
create
(
:deployment
,
environment:
environment
)
}
let
(
:pipeline
)
{
deployment
.
deployable
.
pipeline
}
let
(
:pipeline
)
{
deployment
.
deployable
.
pipeline
}
let!
(
:review_action
)
{
create
(
:ci_build
,
:manual
,
name:
'review-apps'
,
pipeline:
pipeline
,
environment:
'review/$CI_
BUILD
_REF_NAME'
)}
let!
(
:review_action
)
{
create
(
:ci_build
,
:manual
,
name:
'review-apps'
,
pipeline:
pipeline
,
environment:
'review/$CI_
COMMIT
_REF_NAME'
)}
let!
(
:production_action
)
{
create
(
:ci_build
,
:manual
,
name:
'production'
,
pipeline:
pipeline
,
environment:
'production'
)}
let!
(
:production_action
)
{
create
(
:ci_build
,
:manual
,
name:
'production'
,
pipeline:
pipeline
,
environment:
'production'
)}
it
'returns a list of actions with matching environment'
do
it
'returns a list of actions with matching environment'
do
...
...
spec/requests/api/runner_spec.rb
View file @
3ebd29b5
...
@@ -312,8 +312,8 @@ describe API::Runner do
...
@@ -312,8 +312,8 @@ describe API::Runner do
end
end
let
(
:expected_variables
)
do
let
(
:expected_variables
)
do
[{
'key'
=>
'CI_
BUILD
_NAME'
,
'value'
=>
'spinach'
,
'public'
=>
true
},
[{
'key'
=>
'CI_
JOB
_NAME'
,
'value'
=>
'spinach'
,
'public'
=>
true
},
{
'key'
=>
'CI_
BUILD
_STAGE'
,
'value'
=>
'test'
,
'public'
=>
true
},
{
'key'
=>
'CI_
JOB
_STAGE'
,
'value'
=>
'test'
,
'public'
=>
true
},
{
'key'
=>
'DB_NAME'
,
'value'
=>
'postgres'
,
'public'
=>
true
}]
{
'key'
=>
'DB_NAME'
,
'value'
=>
'postgres'
,
'public'
=>
true
}]
end
end
...
@@ -437,9 +437,9 @@ describe API::Runner do
...
@@ -437,9 +437,9 @@ describe API::Runner do
context
'when triggered job is available'
do
context
'when triggered job is available'
do
let
(
:expected_variables
)
do
let
(
:expected_variables
)
do
[{
'key'
=>
'CI_
BUILD
_NAME'
,
'value'
=>
'spinach'
,
'public'
=>
true
},
[{
'key'
=>
'CI_
JOB
_NAME'
,
'value'
=>
'spinach'
,
'public'
=>
true
},
{
'key'
=>
'CI_
BUILD
_STAGE'
,
'value'
=>
'test'
,
'public'
=>
true
},
{
'key'
=>
'CI_
JOB
_STAGE'
,
'value'
=>
'test'
,
'public'
=>
true
},
{
'key'
=>
'CI_
BUILD
_TRIGGERED'
,
'value'
=>
'true'
,
'public'
=>
true
},
{
'key'
=>
'CI_
PIPELINE
_TRIGGERED'
,
'value'
=>
'true'
,
'public'
=>
true
},
{
'key'
=>
'DB_NAME'
,
'value'
=>
'postgres'
,
'public'
=>
true
},
{
'key'
=>
'DB_NAME'
,
'value'
=>
'postgres'
,
'public'
=>
true
},
{
'key'
=>
'SECRET_KEY'
,
'value'
=>
'secret_value'
,
'public'
=>
false
},
{
'key'
=>
'SECRET_KEY'
,
'value'
=>
'secret_value'
,
'public'
=>
false
},
{
'key'
=>
'TRIGGER_KEY_1'
,
'value'
=>
'TRIGGER_VALUE_1'
,
'public'
=>
false
}]
{
'key'
=>
'TRIGGER_KEY_1'
,
'value'
=>
'TRIGGER_VALUE_1'
,
'public'
=>
false
}]
...
...
spec/requests/ci/api/builds_spec.rb
View file @
3ebd29b5
...
@@ -81,8 +81,8 @@ describe Ci::API::Builds do
...
@@ -81,8 +81,8 @@ describe Ci::API::Builds do
expect
(
runner
.
reload
.
platform
).
to
eq
(
"darwin"
)
expect
(
runner
.
reload
.
platform
).
to
eq
(
"darwin"
)
expect
(
json_response
[
"options"
]).
to
eq
({
"image"
=>
"ruby:2.1"
,
"services"
=>
[
"postgres"
]
})
expect
(
json_response
[
"options"
]).
to
eq
({
"image"
=>
"ruby:2.1"
,
"services"
=>
[
"postgres"
]
})
expect
(
json_response
[
"variables"
]).
to
include
(
expect
(
json_response
[
"variables"
]).
to
include
(
{
"key"
=>
"CI_
BUILD
_NAME"
,
"value"
=>
"spinach"
,
"public"
=>
true
},
{
"key"
=>
"CI_
JOB
_NAME"
,
"value"
=>
"spinach"
,
"public"
=>
true
},
{
"key"
=>
"CI_
BUILD
_STAGE"
,
"value"
=>
"test"
,
"public"
=>
true
},
{
"key"
=>
"CI_
JOB
_STAGE"
,
"value"
=>
"test"
,
"public"
=>
true
},
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
}
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
}
)
)
end
end
...
@@ -182,9 +182,9 @@ describe Ci::API::Builds do
...
@@ -182,9 +182,9 @@ describe Ci::API::Builds do
expect
(
response
).
to
have_http_status
(
201
)
expect
(
response
).
to
have_http_status
(
201
)
expect
(
json_response
[
"variables"
]).
to
include
(
expect
(
json_response
[
"variables"
]).
to
include
(
{
"key"
=>
"CI_
BUILD
_NAME"
,
"value"
=>
"spinach"
,
"public"
=>
true
},
{
"key"
=>
"CI_
JOB
_NAME"
,
"value"
=>
"spinach"
,
"public"
=>
true
},
{
"key"
=>
"CI_
BUILD
_STAGE"
,
"value"
=>
"test"
,
"public"
=>
true
},
{
"key"
=>
"CI_
JOB
_STAGE"
,
"value"
=>
"test"
,
"public"
=>
true
},
{
"key"
=>
"CI_
BUILD
_TRIGGERED"
,
"value"
=>
"true"
,
"public"
=>
true
},
{
"key"
=>
"CI_
PIPELINE
_TRIGGERED"
,
"value"
=>
"true"
,
"public"
=>
true
},
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
{
"key"
=>
"TRIGGER_KEY_1"
,
"value"
=>
"TRIGGER_VALUE_1"
,
"public"
=>
false
},
{
"key"
=>
"TRIGGER_KEY_1"
,
"value"
=>
"TRIGGER_VALUE_1"
,
"public"
=>
false
},
...
...
spec/services/ci/create_pipeline_service_spec.rb
View file @
3ebd29b5
...
@@ -200,7 +200,7 @@ describe Ci::CreatePipelineService, services: true do
...
@@ -200,7 +200,7 @@ describe Ci::CreatePipelineService, services: true do
context
'with environment'
do
context
'with environment'
do
before
do
before
do
config
=
YAML
.
dump
(
deploy:
{
environment:
{
name:
"review/$CI_
BUILD
_REF_NAME"
},
script:
'ls'
})
config
=
YAML
.
dump
(
deploy:
{
environment:
{
name:
"review/$CI_
COMMIT
_REF_NAME"
},
script:
'ls'
})
stub_ci_pipeline_yaml_file
(
config
)
stub_ci_pipeline_yaml_file
(
config
)
end
end
...
...
spec/services/create_deployment_service_spec.rb
View file @
3ebd29b5
...
@@ -104,16 +104,16 @@ describe CreateDeploymentService, services: true do
...
@@ -104,16 +104,16 @@ describe CreateDeploymentService, services: true do
context
'when variables are used'
do
context
'when variables are used'
do
let
(
:params
)
do
let
(
:params
)
do
{
{
environment:
'review-apps/$CI_
BUILD
_REF_NAME'
,
environment:
'review-apps/$CI_
COMMIT
_REF_NAME'
,
ref:
'master'
,
ref:
'master'
,
tag:
false
,
tag:
false
,
sha:
'97de212e80737a608d939f648d959671fb0a0142'
,
sha:
'97de212e80737a608d939f648d959671fb0a0142'
,
options:
{
options:
{
name:
'review-apps/$CI_
BUILD
_REF_NAME'
,
name:
'review-apps/$CI_
COMMIT
_REF_NAME'
,
url:
'http://$CI_
BUILD
_REF_NAME.review-apps.gitlab.com'
url:
'http://$CI_
COMMIT
_REF_NAME.review-apps.gitlab.com'
},
},
variables:
[
variables:
[
{
key:
'CI_
BUILD
_REF_NAME'
,
value:
'feature-review-apps'
}
{
key:
'CI_
COMMIT
_REF_NAME'
,
value:
'feature-review-apps'
}
]
]
}
}
end
end
...
...
spec/simplecov_env.rb
View file @
3ebd29b5
...
@@ -15,9 +15,9 @@ module SimpleCovEnv
...
@@ -15,9 +15,9 @@ module SimpleCovEnv
def
configure_job
def
configure_job
SimpleCov
.
configure
do
SimpleCov
.
configure
do
if
ENV
[
'CI_
BUILD
_NAME'
]
if
ENV
[
'CI_
JOB
_NAME'
]
coverage_dir
"coverage/
#{
ENV
[
'CI_
BUILD
_NAME'
]
}
"
coverage_dir
"coverage/
#{
ENV
[
'CI_
JOB
_NAME'
]
}
"
command_name
ENV
[
'CI_
BUILD
_NAME'
]
command_name
ENV
[
'CI_
JOB
_NAME'
]
end
end
if
ENV
[
'CI'
]
if
ENV
[
'CI'
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment