public class ResponseResult<T> : IResponseResult<T>
{
public bool IsSuccess { get; private set; }
public ProblemDetails? Error { get; private set; }
public T? Data { get; private set; }
public static ResponseResult<T> Success(T data) => new ResponseResult<T> { IsSuccess = true, Data = data };
public static ResponseResult<T> Success() => new ResponseResult<T> { IsSuccess = true};
public static ResponseResult<T> Failure(Exception exception) => new ResponseResult<T>
{
IsSuccess = false,
Error = new ProblemDetails
{
Title = GetTitleByException(exception),
Detail = exception.Message,
Status = exception switch
{
ArgumentException => StatusCodes.Status400BadRequest,
KeyNotFoundException => StatusCodes.Status404NotFound,
UnauthorizedAccessException => StatusCodes.Status401Unauthorized,
_ => StatusCodes.Status500InternalServerError
},
Instance = Guid.NewGuid().ToString()
}
};
private static string GetTitleByException(Exception exception) =>
exception switch
{
ArgumentException => "Invalid argument",
KeyNotFoundException => "Resource not found",
UnauthorizedAccessException => "Unauthorized",
_ => "Internal server error"
};
}
return ResponseResult<bool>.Failure(
new KeyNotFoundException(
string.Format("User with login '{0}' not found", request.Login))
);
[HttpGet("verify")]
public async Task<ActionResult> VerifyUser(
[FromQuery] string login,
[FromQuery] string password,
CancellationToken cancellationToken)
{
var result = await mediator.Send(new VerifyQuery() { Login = login, Password = password }, cancellationToken);
if (result.IsSuccess)
{
return Ok(new { verify = result.Data });
}
return StatusCode(result.Error?.Status ?? 400, result.Error);
}
FROM jenkins/jenkins:2.462.3-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
services:
jenkins:
container_name: jenkins-blueocean
image: 192.168.0.42:5000/jenkins:2.462.3-jdk17
privileged: true # Запуск с правами привилегированного контейнера
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Подключаем Docker сокет для доступа к хосту
networks:
jenkins_network: # Используем пользовательскую сеть
networks:
jenkins_network: # Создание пользовательской сети
driver: bridge
jenkins@f2b6f83f5892:/$ docker images
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
root@f2b6f83f5892:/# apt-get install acl
root@f2b6f83f5892:/# setfacl -m u:jenkins:rw /var/run/docker.sock
jenkins@f2b6f83f5892:/$ docker images
version: '3'
services:
web:
volumes:
- ./web:/app
env_file:
- ./web/.env
build: ./web
ports:
- '8000:8000'
networks:
- my_network
other_service:
image: some_image
networks:
- my_network
networks:
my_network:
driver: bridge
environment:
- API_URL=http://external.api.com
version: '3'
services:
web:
volumes:
- ./web:/app
env_file:
- ./web/.env
build: ./web
ports:
- '8000:8000'
networks:
- my_network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
- my_network
networks:
my_network:
driver: bridge
- "traefik.http.routers.terminator-router.entrypoints=websecure" # Изменил на websecure
- "traefik.http.routers.terminator-router.tls=true" # Включил TLS
public class DockerContext: DbContext
{
private bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"; } }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!InDocker)
{
// Здесь переопределяем ConnectionString для миграций
}
}
public static bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"; } }
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DockerContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString(InDocker ? "DockerContext" : "MigrationContext") ?? throw new InvalidOperationException("Connection string 'DockerContext' not found.")));
}