diff --git a/.gitignore b/.gitignore index 6d47248..d7fc194 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ +vendor mtg-price-vk +go-mtg-vk */.swp vk/token.go vk/secrets.go diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..094e6ca --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM golang:latest + +COPY . ./go-mtg-vk +WORKDIR go-mtg-vk +ENTRYPOINT ./run.sh + diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..b30b0e6 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,21 @@ +pipeline { + agent any + + stages { + stage('Pull') { + steps { + git pull + } + } + stage('Test') { + steps { + ./deploy.sh test + } + } + stage('Deploy') { + steps { + ./deploy.sh prod + } + } + } +} diff --git a/caching/secrets.go b/caching/secrets.go index ab1951b..e8c9f31 100644 --- a/caching/secrets.go +++ b/caching/secrets.go @@ -4,6 +4,6 @@ import ( "time" ) -const HOST_NAME = "localhost:6379" +const HOST_NAME = "redis:6379" const PASSWORD = "" const CACHE_EXPIRATION = time.Hour * 24 diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..ddc2b6d --- /dev/null +++ b/deploy.sh @@ -0,0 +1,26 @@ +#!/bin/bash +if [[ $1 = "test" ]] +then + TEST_NETWORK_NAME="go_mtg_vk_test_network" + sudo docker network create $TEST_NETWORK_NAME || true + TEST_REDIS_NAME="go_mtg_vk_test_redis" + sudo docker run -d --rm --name $TEST_REDIS_NAME --network $TEST_NETWORK_NAME --net-alias redis redis + TEST_IMAGE_NAME="go_mtg_vk_test_image" + sudo docker build -t $TEST_IMAGE_NAME . + TEST_CONTAINER_NAME="go_mtg_vk_test_container" + sudo docker run --rm --name $TEST_CONTAINER_NAME --network $TEST_NETWORK_NAME -e MODE="test" -e VK_TOKEN=$VK_TOKEN -e VK_SECRET_KEY=$VK_SECRET_KEY -e VK_GROUP_ID=$VK_GROUP_ID -e VK_CONFIRMATION_STRING=$VK_CONFIRMATION_STRING $TEST_IMAGE_NAME + EXIT_CODE=$$ + sudo docker rm -f $TEST_REDIS_NAME + sudo docker image rm -f $TEST_IMAGE_NAME + exit $EXIT_CODE +elif [[ $1 = "prod" ]] +then + PROD_NETWORK_NAME="go_mtg_vk_prod_network" + sudo docker network create $PROD_NETWORK_NAME || true + PROD_REDIS_NAME="go_mtg_vk_prod_redis" + sudo docker run -d --restart always --network $PROD_NETWORK_NAME --name $PROD_REDIS_NAME redis + PROD_IMAGE_NAME="go_mtg_vk_prod_image" + sudo docker build -t $PROD_IMAGE_NAME . + PROD_CONTAINER_NAME="go_mtg_vk_prod_container" + sudo docker run --network $PROD_NETWORK_NAME --restart always --name $PROD_CONTAINER_NAME -e MODE="prod" -e VK_TOKEN=$VK_TOKEN -e VK_SECRET_KEY=$VK_SECRET_KEY -e VK_GROUP_ID=$VK_GROUP_ID -e VK_CONFIRMATION_STRING=$VK_CONFIRMATION_STRING $PROD_IMAGE_NAME +fi diff --git a/go-mtg-vk b/go-mtg-vk index 633289c..927da93 100755 Binary files a/go-mtg-vk and b/go-mtg-vk differ diff --git a/go.mod b/go.mod index 9e53834..913e914 100644 --- a/go.mod +++ b/go.mod @@ -7,5 +7,6 @@ require ( github.com/antchfx/xpath v1.0.0 // indirect github.com/gin-gonic/gin v1.4.0 github.com/go-redis/redis v6.15.2+incompatible + github.com/stretchr/testify v1.3.0 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 ) diff --git a/go.sum b/go.sum index f946927..aee1b3c 100644 --- a/go.sum +++ b/go.sum @@ -12,10 +12,13 @@ github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDA github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile new file mode 100644 index 0000000..19f39a5 --- /dev/null +++ b/jenkins/Dockerfile @@ -0,0 +1,20 @@ +FROM jenkins/jenkins:latest +USER root +RUN apt update +RUN apt install -y sudo +RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers +USER jenkins +RUN sudo apt update +RUN sudo apt install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + software-properties-common +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +RUN sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/debian \ + $(lsb_release -cs) \ + stable" +RUN sudo apt update +RUN sudo apt install -y docker-ce docker-ce-cli containerd.io diff --git a/jenkins/run.sh b/jenkins/run.sh new file mode 100755 index 0000000..dbbc810 --- /dev/null +++ b/jenkins/run.sh @@ -0,0 +1,14 @@ +#!/bin/bash +IMAGE_NAME="mtg_vk_go_jenkins_image" +CONTAINER_NAME="mtg_vk_go_jenkins_container" +sudo docker build -t $IMAGE_NAME . +sudo docker run -d \ + -v /var/run/docker.sock:/var/run/docker.sock\ + --name $CONTAINER_NAME\ + -e VK_TOKEN=$VK_TOKEN\ + -e VK_SECRET_KEY=$VK_SECRET_KEY\ + -e VK_GROUP_ID=$VK_GROUP_ID\ + -e VK_CONFIRMATION_STRING=$VK_CONFIRMATION_STRING\ + --name $CONTAINER_NAME\ + $IMAGE_NAME +sudo docker exec -it $CONTAINER_NAME sudo service docker start diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..3059117 --- /dev/null +++ b/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash +if [[ $MODE = "test" ]] +then + go test ./... +elif [[ $MODE = "prod" ]] +then + go build . + export GIN_MODE="release" + ./go-mtg-vk +fi