Configured CI/CD with docker and jenkins

This commit is contained in:
Artyom Belousov 2019-10-15 00:21:15 +03:00
parent a715a3c1b8
commit e22e908ce5
11 changed files with 104 additions and 1 deletions

2
.gitignore vendored
View file

@ -1,4 +1,6 @@
vendor
mtg-price-vk
go-mtg-vk
*/.swp
vk/token.go
vk/secrets.go

6
Dockerfile Normal file
View file

@ -0,0 +1,6 @@
FROM golang:latest
COPY . ./go-mtg-vk
WORKDIR go-mtg-vk
ENTRYPOINT ./run.sh

21
Jenkinsfile vendored Normal file
View file

@ -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
}
}
}
}

View file

@ -4,6 +4,6 @@ import (
"time"
)
const HOST_NAME = "localhost:6379"
const HOST_NAME = "redis:6379"
const PASSWORD = ""
const CACHE_EXPIRATION = time.Hour * 24

26
deploy.sh Executable file
View file

@ -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

BIN
go-mtg-vk

Binary file not shown.

1
go.mod
View file

@ -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
)

3
go.sum
View file

@ -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=

20
jenkins/Dockerfile Normal file
View file

@ -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

14
jenkins/run.sh Executable file
View file

@ -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

10
run.sh Executable file
View file

@ -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